[并发并行]_[C/C++]_[使用线程本地存储Thread Local Storage(TLS)-win32线程和pthread线程比较]


场景:

1.  需要统计某个线程的对象上创建的个数.

2. 当创建的堆空间需要在线程创建和结束时销毁.

3. 因为范围是线程只能看到自己的存储数据,所以不需要临界区或互斥量来维护自己的堆内存. 假如如果用全局std::map实现,那么必须在put和get时加锁,这是很损耗资源的.

4. 可以用在维护一个连接,比如socket,database连接.


说明:

1. Java也有自己的线程本地存储ThreadLocal

2. pthread的win32版本: http://sourceware.org/pthreads-win32/


例子test_TSL.cpp:

#include "stdafx.h"
#include 
#include 
#include 
#include  
#include  
#include "pthread.h"

#define THREADCOUNT 4 
DWORD dwTlsIndex; 
VOID ErrorExit(const char*); 

static pthread_barrier_t barrier  = NULL;
static pthread_once_t random_is_initialized = PTHREAD_ONCE_INIT;
static pthread_key_t key;

VOID CommonFunc(VOID) 
{ 
   LPVOID lpvData; 
 
// Retrieve a data pointer for the current thread. 
 
   lpvData = TlsGetValue(dwTlsInde

你可能感兴趣的:(C/C++多线程并发并行)