zthread學習 例項五 非任務物件的生存期

2021-07-02 16:54:04 字數 1272 閱讀 1122

在使用執行緒處理時,必須確保非任務物件在任務需要它們的時候長期保留在活動狀態,如果在任務完成之前,那些被任務使用的非任務物件已經被銷毀,此時會導致非法訪問儲存單元。因此,那些被共享的非任務物件總要在堆中new出來,並且確保沒有其他任務物件引用它時才動態銷毀,此時就是引用計數。

zthread庫有乙個引用計數的模板countedptr<>,它自動執行引用計數(執行拷貝建構函式時),並在引用計數歸0時delete這個物件。每當有物件有被多於乙個任務使用時,幾乎總是需要使用countedptr<>來管理那些物件,以防由對角生存期爭端而產生的問題。

[cpp]view plain

copy

#include "stdafx.h"

#include 

#include 

#include "zthread/thread.h"

#include "zthread/runnable.h"

#include "zthread/poolexecutor.h"  

using

namespace

zthread;  

using

namespace

std;  

class

ccount  

//n++;

}  private

:  int

n[100];  

//int n;

};  

class

incrementer : 

public

runnable  

incrementer(const

countedptr& pc) : pcount(pc){}  

void

run()  

}  private

:  //ccount* pcount;

countedptrpcount;  

};  

int_tmain(

intargc, _tchar* argv)  

catch

(synchronization_exception&  e)  

return

0;  

}  

**中注釋起來的在棧中定義的ccount物件,會出現非法訪問的錯誤。

而由countedptr<>模板管理的ccount物件,在任務兩次對它引用時都會增1,只要任務執行,計數就會非0,當使用ccount物件的所有任務全部完成時(此時引用計數歸0),才會delete  ccount物件。

zthread學習 例項四 讓步 休眠 優先順序

1 讓步 thread yield 可以介入cpu的排程,使cpu強制放棄執行當前執行緒。2 休眠 thread sleep 可以使執行緒停止執行一段時間。3 優先順序 thread setpriority thread getpriority 可以人為的改變到執行緒執行的優先順序,確保緊急的任務先...

zthread學習 例項七 執行緒本地儲存

消除任務在共享資源上發生衝突問題的第二種方法是 消除共享變數,對使用同乙個變數的不同執行緒,可以為同乙個變數建立不同的儲存單元。因此,如果有5個執行緒使用乙個含有變數x的物件,執行緒本地儲存會自動為變數產生5個不同的儲存單元。cpp view plain copy include stdafx.h ...

zthread學習 例項十 執行緒間的協助(一)

使用執行緒在同一時刻執行多個任務時,可以使用互斥鎖來同步多個任務,阻止乙個任務干擾另乙個任務的資源。也就是說,使用互斥鎖來保證同一時刻只允許乙個任務訪問共享資源。執行緒間協作 多個執行緒一起工作來共同解決某個問題 問題的某一部分必須在另一部分被解決之前解決完畢 zthread庫中使用 互斥鎖 並允許...