vc中線程的本地儲存

2021-06-11 09:26:31 字數 977 閱讀 7753

//執行緒的本地儲存(tls)

/* tls的作用

當多個執行緒使用同乙個全域性或者靜態變數的時候

由於各個執行緒會各自對該變數賦值操作,那麼資料會被

不同的執行緒覆蓋,即這些變數對於執行緒只有乙個副本。

為了各自執行緒儲存各自的資料,所以引入了tls,一旦使用了

tls,變數會對各個執行緒產生不同的副本,各個執行緒內就可以使用這些

變數儲存自己的資料。

tls的使用:

1 使用定義方式:__declspec(thread)

__declspec(thread)char * g_psztext = null;

2 tls系列的函式

1 分配乙個tls的索引 dword tlsalloc(void);

2 將資料儲存到乙個索引 bool tlssetvalue(dword dwtlsindex,lpvoid lptlsvalue);

3 從乙個索引得到乙個值 lpvoid tlsgetvalue(dword dwtlsindex);

4 釋放乙個索引 bool tlsfree(dword dwtlsindex);

*/#include "stdafx.h"

#include "windows.h"

#include "conio.h"

#include "stdlib.h"

//使用執行緒定義變數

__declspec(thread) char * g_psztext2 = null;

char * g_psztext1 = null;

//定義索引值

dword g_dwtlsindex = 0;

void print()

dword winapi threadproc1( lpvoid pdata )

return 0;

}void tls()

int main(int argc, char* argv)

執行緒本地儲存

對於多執行緒程式,所有執行緒共享全域性和靜態變數,任何執行緒使用變數之後都會在其他執行緒可見,因此對於執行順序非常重要的場景,需要使用多重方式來進行同步確保執行緒安全。但是,如果希望每個執行緒單獨擁有乙個全域性或靜態變數,所有執行緒都可以使用它,但是在每個執行緒中是單獨儲存的,那麼就需要使用執行緒本...

執行緒本地儲存 TLS

執行緒本地儲存 tls 是乙個方法,通過該方法,給定的多執行緒程序中的每個執行緒都可以分配儲存執行緒特定資料的位置。動態繫結 執行時 執行緒特定資料是通過 tls api tlsalloc tlsgetvalue tlssetvalue 和tlsfree 的方式支援的。除了現有的 api 實現,wi...

執行緒本地儲存 declspec thread

執行緒本地儲存 thread local storage,tls 簡單分析與使用 在多執行緒程式設計中,同乙個變數,如果要讓多個執行緒共享訪問,那麼這個變數可以使用關鍵字volatile進行宣告 那麼如果乙個變數不想使多個執行緒共享訪問,那麼該怎麼辦呢?呵呵,這個辦法就是tls,執行緒本地儲存.它的...