Mutex物件使用時發現的問題

2021-06-11 05:12:12 字數 1231 閱讀 4707

mutex物件等待互斥物件的方法有:mutex.waitall、waitone、mutex.waitany

使用mutex物件經常出現的異常現象有:

異常一、

由於出現被放棄的mutex,等待過程結束

原因:獲取互斥物件後沒有顯式的釋放對應的互斥物件就結束了對應的執行緒

解決辦法:每呼叫乙個等待方法,在結束呼叫時都要呼叫releasemutex()方法進行mutex物件釋放。而每種釋放的方法方式也有點區別。如:

(1)、waitone()

mutex gm1=new mutex();

gm1.waitone();//等待gm1的釋放

gm1的釋放為:

gm1.releasemutex();

(2)、waitall()

mutex gms = new mutex[2];

gms[0] = gm1;

gms[1] = gm2;

mutex.waitall(gms); //等待gm1和gm2的釋放

for (int i = 0; i < gms.length; i++)

(3)、waitany()

mutex gms = new mutex[2];

gms[0] = gm1;

gms[1] = gm2;

int index = mutex.waitany(gms); //等待陣列中任意乙個mutex物件被釋放

gms[index].releasemutex();

異常二、

從不同步的**塊中呼叫了物件同步方法。

此問題是在呼叫waitany()方法後呼叫多個釋放物件導致的。如:

mutex gms = new mutex[2];

gms[0] = gm1;

gms[1] = gm2;

mutex.waitany(gms);

gm1.releasemutex();

gm2.releasemutex();

正確的寫法如:

mutex gms = new mutex[2];

gms[0] = gm1;

gms[1] = gm2;

int index = mutex.waitany(gms); //等待陣列中任意乙個mutex物件被釋放

gms[index].releasemutex();

總結:呼叫mutex物件的等待與釋放方法要成對出現,呼叫哪個就要釋放哪個。

寫的有點俗,請見諒哈

mongodb使用時遇到的問題

mon new mongoclient mongodb localhost 27017 要操作的資料庫 database mon apidata1 選擇集合 info database uuuvnq 全部查詢 data info find var dump data 結果 原因 find返回的是游標...

nodemailer 使用時碰到的問題

nodemailer包加入後出現如下問題 fangdemacbook air ah fxc node server.js users fxc work on node ah node modules nodemailer lib mailer index.js 31 compile args thi...

vue fullpage使用時遇到的問題

專案中用到了vue fullpage,遇到了幾個問題。專案情況主要就是做個資料報告,通過移動端的單頁滾動效果來展示資料。單頁滾動中某些元素需要相應的動畫效果。實際上這個bug已經被作者修改好了的,但是並沒有更新到npm上。commit d309628ecf54a390bd5a070ab411d43b...