- Mastering C++ Multithreading
- Maya Posch
- 195字
- 2021-07-15 17:34:03
Thread local storage (TLC)
With Pthreads, TLS is accomplished using keys and methods to set thread-specific data:
pthread_key_t global_var_key;
void* worker(void* arg) {
int *p = new int;
*p = 1;
pthread_setspecific(global_var_key, p);
int* global_spec_var = (int*) pthread_getspecific(global_var_key);
*global_spec_var += 1;
pthread_setspecific(global_var_key, 0);
delete p;
pthread_exit(0);
}
In the worker thread, we allocate a new integer on the heap, and set the global key to its own value. After increasing the global variable by 1, its value will be 2, regardless of what the other threads do. We can set the global variable to 0 once we're done with it for this thread, and delete the allocated value:
int main(void) {
pthread_t threads[5];
pthread_key_create(&global_var_key, 0);
for (int i = 0; i < 5; ++i)
pthread_create(&threads[i],0,worker,0);
for (int i = 0; i < 5; ++i) {
pthread_join(threads[i], 0);
}
return 0;
}
A global key is set and used to reference the TLS variable, yet each of the threads we create can set its own value for this key.
While a thread can create its own keys, this method of handling TLS is fairly involved compared to the other APIs we're looking at in this chapter.
推薦閱讀
- Mastering NetBeans
- 小程序?qū)崙?zhàn)視頻課:微信小程序開發(fā)全案精講
- Machine Learning with R Cookbook(Second Edition)
- Python數(shù)據(jù)分析(第2版)
- Data Analysis with Stata
- C語言程序設(shè)計
- 機器學(xué)習(xí)與R語言實戰(zhàn)
- Extending Puppet(Second Edition)
- Unity 3D/2D移動開發(fā)實戰(zhàn)教程
- 軟件工程基礎(chǔ)與實訓(xùn)教程
- C++ Application Development with Code:Blocks
- RESTful Web Clients:基于超媒體的可復(fù)用客戶端
- 分布式架構(gòu)原理與實踐
- 實戰(zhàn)Python網(wǎng)絡(luò)爬蟲
- MATLAB 2020 GUI程序設(shè)計從入門到精通