C++ 多线程实现与 API 详解
1. 多线程随机数生成与互斥访问
在多线程编程中,随机数生成是一个常见的需求。下面是一个使用线程局部变量的随机数生成函数 randGen :
int randGen(const int& min, const int& max) {
static thread_local mt19937 generator(hash<thread::id>()(this_thread::get_id()));
uniform_int_distribution<int> distribution(min, max);
return distribution(generator);
}
这个函数利用了线程局部存储(Thread-local storage)的特性。线程局部存储是线程内存的一部分,专门用于存储全局变量,但这些变量仅对该特定线程可见。在这里, generator 实例被声明为静态的,这样可以避免每次调用函数时都重新初始化它。同时,使用线程局部存储确保每个线程都有自己独立的 generator 实例,避免了在所有线程之间共享该实例。
线程函数最后会进行一系列的互斥操作,将新值复制到数组中:
cout_mtx.lock();
cout << "Thread " << tid << " adding "
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



