gpt4 book ai didi

c - Linux中的线程并发

转载 作者:行者123 更新时间:2023-11-30 17:13:14 24 4
gpt4 key购买 nike

我是 SO 的初学者,所以如果问题不清楚,请告诉我。

我正在使用两个线程,例如 A 和 B。并且我有一个全局变量“p”。线程 A 正在循环并递增 'p' 的值。同时 B 正在尝试将 'p' 设置为其他值(两者都是两个不同的线程函数)。

如果我使用互斥锁进行同步,并且线程 A 在 while 循环中获取互斥锁并递增“p”,但它不会释放互斥锁。所以我的问题是,如果线程A不释放互斥锁,线程B可以访问变量'p'吗??

编辑线程 B 还可以使用互斥体保护对“p”的访问。

如果线程A使用pthread_mutex_lock()锁定,并且不释放它,那么如果同一个线程(A)再次尝试访问该锁会发生什么(记住线程A正在循环)例如

   while(1)
{
pthread_mutex_lock(&mutex);
p = 10;

}

如果互斥体从未被释放,这段代码有什么问题吗?

最佳答案

您仍然可以访问线程 B 中的变量,因为互斥锁是一个未连接到变量的单独对象。如果您在访问p之前从线程B调用互斥锁,那么线程B将等待互斥锁被释放。事实上,线程 A 只会执行一次循环体,因为它将等待互斥体被释放,然后才能再次锁定它。

如果您不解锁互斥锁,则任何锁定同一互斥锁的调用都将无限期等待,但该变量将是可写的。

在您的示例中,对变量p的访问是所谓的关键部分,或者是互斥锁锁定和互斥释放之间的代码部分。

关于c - Linux中的线程并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com