【发布时间】:2016-03-03 15:33:33
【问题描述】:
我了解保护复杂数据结构的必要性。像链表一样,带有信号量。我已经看到当一个线程修改列表而另一个线程正在遍历列表时可能发生的坏事。
但是对于一个非常简单的数据字段(例如布尔值)是否需要这样做?在我工作的地方,我会看到很多类似下面示例的代码,或者代码审阅者要求我添加这些代码。这真的需要吗?如果是这样,有人可以解释如果不使用信号量会出现什么问题吗?
#define TRUE 1
#define FALSE 0
static int enabled;
int is_foo_enabled(void)
{
int ret;
reserve_foo_semaphore();
ret = enabled;
release_foo_semaphore();
return ret;
}
void enable_foo(void)
{
reserve_foo_semaphore();
enabled = TRUE;
release_foo_semaphore();
}
void disable_foo(void)
{
reserve_foo_semaphore();
enabled = FALSE;
release_foo_semaphore();
}
【问题讨论】:
-
int不是布尔类型。您可以使用stdatomics.h作为轻量级替代方案。 -
视情况而定......
标签: c multithreading semaphore