gpt4 book ai didi

我们可以为所有其他调用使用 pthreads 互斥锁锁定一个函数吗?

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:38 25 4
gpt4 key购买 nike

假设一个程序产生了一个线程。该线程调用 func1()。然而,func1() 也在主应用程序的其他地方被调用。如果我只将它包装在线程中的互斥锁中,它对整个应用程序是否安全?还是必须进入其中并锁定它?如果其中有它调用的其他函数,但也在不同地方的主应用程序上调用,是否必须递归并锁定它们?

最佳答案

改掉认为你用互斥体保护函数的习惯,你没有。

您实际上保护了资源,例如线程间共享的变量。

一旦您接受了这个小智慧,您就会开始思考哪些数据必须受到保护,并且可以最小化保护的粒度。

例如,如果func1()func2()都访问了共享变量x,那么你可以调用func2 () 来自 func1()main(),您将不得不设计一个解决方案来检测互斥体是否已被锁定,因此func2() 可以声明/释放(当从 main 调用时)或什么也不做(当从 func1() 调用时)。或者使用递归互斥体。

线程不安全的函数(例如使用静态数据区域)可以用互斥体保护,但我发现通常更容易重构它们,使它们本质上是线程安全的(分配内存或线程本地存储)。

关于我们可以为所有其他调用使用 pthreads 互斥锁锁定一个函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4357169/

25 4 0