一个简单的pthread变量共享

时间:2012-10-25 07:29:06

标签: c pthreads mutex

  

可能重复:
  Is mutex needed to synchronize a simple flag between pthreads?

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

A有时写入一个标志变量(int),B有时会读它。

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

2 个答案:

答案 0 :(得分:1)

如果变量比true / false标志更复杂,保护它。无法保证一个线程不会在写入操作中途读取变量。

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

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

答案 1 :(得分:0)

是的,如果您在两个线程中使用该标志,则需要互斥锁。互斥是必须的,因为假设线程B基于标志进行两个操作,并且线程A继续更新标志值。在线程B中假设在完成第一个操作上下文切换发生并且线程A改变了标志值之后,线程B将获得第二个操作的新标志值,因此必须使用mutext。

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