單列模式及靜態變數在多執行緒下

2021-06-28 23:20:15 字數 1268 閱讀 7534

#include

#include

#include

class foo

void test()

};foo* bar()

unsigned __stdcall thread( void* )

int _cdecl main( int argc, char** argv )

sleep( 5000 );

return 0;

1.以上輸出的結果為

before sleep

in test

in test

in test

in test

in test

in test

in test

in test

in test

after sleep

in test

這就說明名這個10個執行緒中至少有9個執行緒沒 有初始化 就會有問題。所以說多執行緒下要慎用靜態變數,下面來看看單列模式

///#include

using namespace std ;

class singleton

int gettest ( )

private :

singleton ( )  ;

int m_test ;

} ;int main ( int argc , char * argv [ ] )

//同樣此模式在多執行緒下靜態變數也不會都初始化

一下這個單列模式之靜態物件只會初始化一次 因為他在主函式中初始化,但是需要delete刪除靜態物件 如果在主線程中呼叫 怕子執行緒還在用靜態變數造成程式崩潰

class singleton

static void destoryinstance ( )

}int gettest ( )

private :

singleton ( )

static const singleton * m_instance ;

int m_test ;

} ;const singleton * singleton :: m_instance = new singleton ( ) ;

unsigned __stdcall thread( void* )

int _cdecl main( int argc, char** argv )

//singleton :: destoryinstance ( ) ;

sleep( 5000 );

return 0;}

變數在多執行緒下的安全性回顧

用於測試變數在多執行緒下的安全性.internalnum 表示方法內的數字變數 outsidenum 表示類的成員變數 多執行緒對 myobj 的add 方法進行操作 結果發現 如下 public class fieldinthreads class myobj public synchronize...

乙個巨坑,多執行緒中靜態變數的錯誤使用問題

分析發現,只要開啟兩路以上均會出現花屏,說明確實不是gpu解碼能力的問題 猜測是多執行緒開啟同乙個檔案,加鎖之後,讀取資料緩慢,導致幀資料不連續導致,於是將h264檔案複製了16份,分別開啟,但是問題依然存在 派出了讀檔案的問題 發現渲染的時候gpu的3d資源占用較多,大概80 左右,猜想是不是因為...

疑難 在單執行緒中模擬多執行緒的工作模式 下

這段時間忙壞了,還記得這個主題只寫了上半部分,今天抽點時間把下半段給完結吧。該方式主要是使用了 system.enterpriseservices 這個命名空間,通過它建立了乙個 com sta thread 的池 pool 並封裝乙個呼叫 sta的委託,這樣我寫的方法就可以在 sta執行緒上同步。...