我知道保護複雜數據結構的必要性。像鏈接列表和信號量一樣。我看到了當一個線程修改列表而另一個線程在列表中行走時會發生的不好的事情。是讀取/寫入布爾值所需的信號量
但是,這是一個非常簡單的數據字段所需要的,就像一個布爾值?在我工作的地方,我看到很多代碼,如下面的例子,或者需要代碼審查人員添加這些代碼。這真的需要嗎?如果是這樣,有人可以解釋如果沒有使用信號量會出現什麼問題嗎?
#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'作爲一個輕量級的選擇。 – Olaf
這取決於.................. –