C-简单的PTHread变量共享



可能的重复:
是否需要Mutex同步Pthreads之间的简单标志?

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

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

我需要用静音保护该变量,还是可以始终将这些操作视为原子?

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

在某些情况下,有多种方法可以减轻不使用MUTEX保护的方法(例如,如果变量仅逐渐增加,则需要进行双阅读和检查),但是,对于变量的一般修改,Mutex是更好的。您不需要太关注性能,静音非常有效。

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

是的,如果您在两个线程中使用了标志,则需要Mutex。Mutex是必须的,因为假设线程B正在根据标志进行两个操作,而线程A一直在更新标志值。在线程B中,假设完成第一个操作上下文开关发生后,并且线程A更改标志值,线程B将获得第二个操作的新标志值,因此必须使用Mutext。

您可以通过在线程中保持全局标志值来最大程度地减少锁定,并在本地操作完成后更新全局标志,该方法取决于您的要求。

最新更新