相关疑难解决方法(0)

用于防止代码死锁的锁定策略和技术

防止代码死锁的常见解决方案是确保锁定顺序以通用方式发生,而不管哪个线程正在访问资源.

例如,给定线程T1和T2,其中T1访问资源A然后B和T2访问资源B然后A.按照需要的顺序锁定资源会导致死锁.简单的解决方案是锁定A然后锁定B,无论订单特定的线程将使用哪些资源.

问题情况:

Thread1                         Thread2
-------                         -------
Lock Resource A                 Lock Resource B
 Do Resource A thing...          Do Resource B thing...
Lock Resource B                 Lock Resource A
 Do Resource B thing...          Do Resource A thing...
Run Code Online (Sandbox Code Playgroud)

可能解决方案

Thread1                         Thread2
-------                         -------
Lock Resource A                 Lock Resource A
Lock Resource B                 Lock Resource B
 Do Resource A thing...          Do Resource B thing...
 Do Resource B thing...          Do Resource A thing...
Run Code Online (Sandbox Code Playgroud)

我的问题是在编码中使用了哪些其他技术,模式或常用做法来保证死锁预防?

c++ deadlock design-patterns locking

29
推荐指数
3
解决办法
2万
查看次数

Mutex用于简单数据类型

我对并发很新,我在决定如何使用互斥锁时遇到了麻烦.目前,它们遍布我的代码,两个线程相互作用.这种互斥体的使用是否合适?

class Foo
{
public:
    void SetMember(int n) {  AcquireMutex(..); n_ = n; ReleaseMutex(...);}
private:
   Thread()
   {
      while(1)
      {
         AcquireMutex(..);
         // Do something with n_
         ReleaseMutex(...);
       }
   }
};
Run Code Online (Sandbox Code Playgroud)

我有很多数据成员可以通过不同的线程从外部读取和设置,我发现跟踪所有获取和释放互斥锁是一件令人头痛的问题.

c++ mutex

5
推荐指数
1
解决办法
369
查看次数

标签 统计

c++ ×2

deadlock ×1

design-patterns ×1

locking ×1

mutex ×1