現(xiàn)在我在c++ project里面定義了一個(gè)隊(duì)列。 并且有兩個(gè)函數(shù),一個(gè)函數(shù)負(fù)責(zé)進(jìn)隊(duì)列,一個(gè)函數(shù)負(fù)責(zé)讀隊(duì)列。 第一個(gè)進(jìn)隊(duì)列的函數(shù),是已經(jīng)存在dll,并且我可以直接調(diào)用的callback函數(shù),作用就是一有新信息傳送到電腦,就會(huì)把數(shù)據(jù)塞進(jìn)隊(duì)列。 我唯一做的編輯就是在callback里面加入queue.push。 第二個(gè)queue.pop是我自己寫(xiě)的一個(gè)函數(shù),并且完成了一些數(shù)據(jù)處理。 現(xiàn)在復(fù)雜的就是,我并沒(méi)有在c++ 內(nèi)定義線程,而是把這個(gè)工程生成dll,并且在c#內(nèi)調(diào)用這個(gè)dll. 用一個(gè)timer去啟動(dòng)第二個(gè)函數(shù), 第一個(gè)函數(shù)由于在c++內(nèi)已經(jīng)定義好了,也是一個(gè)隨時(shí)會(huì)啟動(dòng)的函數(shù)。所以在一定意義上,他們就是個(gè)多線程。 現(xiàn)在為了queue的數(shù)據(jù)安全,我需要在c++里加入mutex,所以我現(xiàn)在要對(duì)queue上鎖,請(qǐng)問(wèn)我應(yīng)該用什么語(yǔ)句。函數(shù)1里是queue.push()函數(shù)2里是queue.pop();
2 回答

慕森王
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
在所有的函數(shù)中這樣操作:
加鎖
進(jìn)行任務(wù)隊(duì)列操作
完成任務(wù)隊(duì)列操作
........或者其他什么操作,反正知道是涉及到兩個(gè)隊(duì)列的操作,全部放在鎖中間
解鎖
只要?jiǎng)e在兩個(gè)隊(duì)列操作時(shí)分別加鎖, 這樣就不會(huì)有任何問(wèn)題

千萬(wàn)里不及你
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
CRITICAL_SECTION m_lock;
InitializeCriticalSection(&m_lock);//初始化
//加鎖
EnterCriticalSection(&m_lock);
queue.push()
LeaveCriticalSection(&m_lock);
EnterCriticalSection(&m_lock);
queue.pop();
LeaveCriticalSection(&m_lock);
- 2 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報(bào)
0/150
提交
取消