- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
引用 C11(N1570 草案),7.24.5.8 strtok 函数:
The
strtok
function is not required to avoid data races with other calls to thestrtok
function.311)311) The
strtok_s
function can be used instead to avoid data races.
p = strtok(str, delim);
while (p != NULL)
{
puts(p);
p = strtok(NULL, delim);
}
strtok_s
(在附件 K 中定义)不可用,以下用法是否足以重入,因为它完全忽略了内部状态?
char str[] = "ab;cd";
char * const endstr = str + strlen(str);
const char *delim = ";";
char *p = strtok(str, delim);
while (p != NULL)
{
puts(p);
if (p + strlen(p) == endstr) // detect ending token
break;
p = strtok(p + strlen(p)+1, delim);
}
NULL
时序列永远不会结束。 ,
strtok
的内部状态(由地址到 token 字符串组成)可以在应用程序的剩余生命周期中保留。
最佳答案
would the following usage be sufficient for reentrancy, since it ignores the internal state entirely? [...]
strtok()
的内部状态完全?该州的性质和用途的具体细节尚未明确。因此,在不引用特定实现的情况下,我们只知道在再次使用
NULL
调用该函数时跟踪下一个标记的开始就足够了。作为它的第一个论点。没有什么比这更值得依赖的了。
char *
组成。 ,并且该函数在传递非空第一个参数时的行为不应依赖于该静态状态的值。我想这就是你所说的“可重入”。但是,我不会使用该术语,因为尽管您的方法可能会产生不受其他线程操作影响的结果,但它仍然会影响(并与其他线程进行数据竞争)不遵循相同模式的其他线程.
strtok()
的数据竞争的可能性。 .如果两个不同的线程调用
strtok()
并且至少通过一次
NULL
作为第一个参数,然后两个线程都修改该函数的静态状态,并且至少有一个读取它。
strtok()
不需要以任何特定方式保护其内部状态,因此如果调用未以某种方式在外部同步,则可能存在数据竞争。在这种情况下,程序行为未定义。
strtok()
相关的不可重入性和数据竞争风险。 ,而您不想依赖
strtok_s()
或 POSIX 的
strtok_r()
,那么我建议避免
strtok()
共。您可以基于
strcspn()
构建解决方案相反,这种替代方法也可能比您的方法更有效,因为它不需要任何
strlen()
调用。
关于c - 显式使用 strtok 是否足以使其可重入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48085000/
嗨,我已经阅读了 Java 中的 ReadWriteLock,但我不确定我是否掌握了它的重入部分。这是两个仅使用一个主线程来显示重入的简短代码示例 public class Locks { p
我在使用 NotifyIcons 时发现了一个重入问题。重现它真的很容易,只需在表单上放置一个 NotiftIcon,点击事件应该如下所示: private bool reentrancyDetect
我正在尝试使用 SQLite 的新 C 接口(interface)预更新 Hook : https://www.sqlite.org/c3ref/preupdate_count.html 现在回答我的
来自阅读here我发现 Actor 是可重入的,并且我希望以下情况成立:如果我有单一类型的转换 ThespianType 但有三个特定的 Actor ThespianType (T1、T2 和 T3)
有人可以向我解释一下 BlockReentrancy 的目的是什么吗?方法在ObservableCollection ? MSDN显示以下内容作为示例: //The typical usage is
我是一名优秀的程序员,十分优秀!