可能重复:
Is mutex needed to synchronize a simple flag between pthreads?
在POSIX环境中,我有两个线程(用pthread_create()
初始化),A和B.
A有时写入一个标志变量(int
),B有时会读它。
我是否需要使用互斥锁保护此变量,或者这些操作是否始终被视为原子?
答案 0 :(得分:1)
如果变量比true / false标志更复杂,应保护它。无法保证一个线程不会在写入操作中途读取变量。
有些方法可以减少在某些情况下不使用互斥锁保护(例如,如果变量只是递增,则重复进行双重读取和检查),但是,对于变量的一般修改,互斥锁是更好。您不需要太关注性能,互斥体非常有效。
当然,如果你绝对必须尽可能多地减少时间,可以使用一些技巧,但它们很少是可移植的。
答案 1 :(得分:0)
是的,如果您在两个线程中使用该标志,则需要互斥锁。互斥是必须的,因为假设线程B基于标志进行两个操作,并且线程A继续更新标志值。在线程B中假设在完成第一个操作上下文切换发生并且线程A改变了标志值之后,线程B将获得第二个操作的新标志值,因此必须使用mutext。
您可以通过在线程本地内存中维护全局标志值来最小化锁定,并在本地操作完成后更新全局标志,该方法取决于您的要求。