Linux上的C语言中的POSIX线程和全局变量
如果我有两个线程和一个全局变量(一个线程不断循环读取变量;另一个不断循环写入它)会发生什么事情不应该? (例如:例外,错误).如果它,是什么方法来防止这种情况.我正在阅读有关互斥锁的内容,并且它们允许对一个线程的变量进行独占访问.这是否意味着只有那个线程可以读写它而不能读取其他内容?
解决方法
它部分取决于变量的类型.如果变量是一个字符串(长字符数组),那么如果编写者和读者同时访问它,那么读者将看到的内容完全未定义. 这就是pthreads提供互斥和其他协调机制的原因.
互斥锁确保使用互斥锁的最多一个线程可以有权继续.使用相同互斥锁的所有其他线程将被保留,直到第一个线程释放互斥锁.因此,如果代码写得正确,任何时候,只有一个线程能够访问该变量.如果代码编写不正确,则: >一个线程可以访问变量而不检查它是否有权这样做 这些都不是理想的行为,但仅仅存在互斥体并不能阻止任何这些行为的发生. 不过,您的代码可以合理地合理使用互斥锁,然后可以正确控制对全局变量的访问.虽然它通过互斥锁具有权限,但是任何一个线程都可以修改变量,或者只是读取变量.要么安全,不受其他线程的干扰. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |