如果我有两个线程和一个全局变量(一个线程不断循环读取变量;另一个不断循环写入它)会发生什么事情不应该? (例如:例外,错误).如果它,是什么方法来防止这种情况.我正在阅读有关互斥锁的内容,并且它们允许对一个线程的变量进行独占访问.这是否意味着只有那个线程可以读写它而不能读取其他内容?

解决方法:

Would anything happen that shouldn’t?

它部分取决于变量的类型.如果变量是一个字符串(长字符数组),那么如果编写者和读者同时访问它,那么读者将看到的内容完全未定义.

这就是pthreads提供互斥和其他协调机制的原因.


Does this mean that only that thread can read and write to it and no other?

互斥锁确保使用互斥锁的最多一个线程可以有权继续.使用相同互斥锁的所有其他线程将被保留,直到第一个线程释放互斥锁.因此,如果代码写得正确,任何时候,只有一个线程能够访问该变量.如果代码编写不正确,则:

一个线程可以访问变量而不检查它是否有权这样做
一个线程可能获取互斥锁并且永远不会释放它
一个线程可能会破坏互斥锁而不通知另一个

这些都不是理想的行为,但仅仅存在互斥体并不能阻止任何这些行为的发生.

不过,您的代码可以合理地合理使用互斥锁,然后可以正确控制对全局变量的访问.虽然它通过互斥锁具有权限,但是任何一个线程都可以修改变量,或者只是读取变量.要么安全,不受其他线程的干扰.

标签: linux, multithreading

相关文章推荐

添加新评论,含*的栏目为必填