2

可能重复:
是否需要互斥锁来同步 pthread 之间的简单标志?

在 POSIX 环境中,我有两个线程(用 初始化pthread_create()),A 和 B。

A 有时会写入标志变量 (an int),而 B 有时会读取它。

我是否需要使用互斥锁来保护这个变量,或者这些操作是否总是被视为原子操作?

4

2 回答 2

1

如果变量比真/假标志更复杂,您应该保护它。不能保证一个线程不会在写入操作的中途读取变量。

有一些方法可以减轻在某些情况下不使用互斥锁保护的情况(例如,如果变量只在递增,则重复双重读取和检查),但是对于对变量的一般修改,互斥锁更好。您不需要在意性能,互斥锁非常有效。

当然,如果您绝对必须尽可能多地节省时间,可以使用一些技巧,但它们很少可移植。

于 2012-10-25T07:33:19.257 回答
0

是的,如果您在两个线程中都使用该标志,则需要互斥锁。Mutex 是必须的,因为假设线程 B 正在基于标志执行两个操作,并且线程 A 不断更新标志值。在线程 B 中假设在完成第一个操作上下文切换后,线程 A 更改了标志值,线程 B 将为第二个操作获取新的标志值,因此必须使用 mutext。

您可以通过在线程本地内存中维护全局标志值来最小化锁定,并在本地操作完成后更新全局标志,该方法取决于您的要求。

于 2012-10-25T07:46:41.127 回答