加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

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

解决方法

Would anything happen that shouldn’t?

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

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读