#include <iostream>
#include <iostream>
static const int num_threads = 5000;
void thread_fun() {
...
}
int main() {
std::thread t[num_threads];
//Launch threads
for (int i = 0; i < num_threads; ++i) {
t[i] = std::thread(thread_fun);
}
//Join threads with the main thread
for (int i = 0; i < num_threads; ++i) {
t[i].join();
}
return 0;
}
當5000個線程開始運行並執行void thread_fun()
時,將如何處理thread_fun()
?C++線程函數說明
會有隻能是
thread_fun()
一個副本在5000個線程訪問它的主程序的堆棧?是否會在主程序的堆棧上創建
thread_fun()
的5000份副本,並且每個線程都可以訪問自己的thread_fun()
副本?將
thread_fun()
加載到5000個線程的每個堆棧中,而不是主程序堆棧中?
我開始學習C++線程,並想知道如何處理這種情況。
通常線程將使用線程局部堆棧。唯一共享的數據結構是堆分配。將線程本地數據從一個線程傳遞到另一個線程的指針是非常危險且最好避免的。 (使用無數據) – tadman
4)5000線程不共享任何東西,但獨立的功能從所有我至今讀。有堆棧和堆空間。一個函數被放入堆棧並在完成時被移除。這是我所指的堆棧。對於第三個問題。我讀的是每個線程都有自己的大約2MB的堆棧。我在問是否這是功能加載和運行的空間。 –
每個線程都有自己的堆棧 – Adam