Linux上的C语言中的POSIX线程和全局变量

Linux上的C语言中的POSIX线程和全局变量,第1张

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

Would anything happen that shouldn’t?

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

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

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

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

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

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

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

总结

以上是内存溢出为你收集整理的Linux上的C语言中的POSIX线程和全局变量全部内容,希望文章能够帮你解决Linux上的C语言中的POSIX线程和全局变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1018474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存