2011-04-15 131 views
1

如何使用boost ::線程執行每個線程在其自己的內存空間中執行的函數。所以當我在函數中分配一個新變量時,它只能作爲執行線程中的一個實例存在。boost ::線程函數執行

只是爲了澄清我想使用boost :: thread生成執行相同方法的線程,但我不想使用鎖或信號燈,我只是希望它在單獨的空間中執行。

回答

4

您在線程函數內分配的任何內容對於該函數而言都是本地的,只要它們未聲明爲static即可。正常編寫你的代碼(避免static局部變量),你會沒事的。

3

如果您需要創建一個完全在其自己的地址空間內運行的線程,那麼您要做的是創建一個進程,而不是一個線程。定義線程是在父進程的相同地址空間內運行的執行點。

如果您確實需要創建線程(即線程之間共享內存和其他資源),但您還需要一部分專用於特定線程的內存,那麼您有幾個選項: 1)as ildjarn建議,讓線程程序分配本地(或動態內存)並編寫代碼,以便每個線程使用它自己分配的內存。 2)看看TLS(線程本地存儲)。它是一個API,允許您創建專用於特定線程的「全局」變量。 C++的一些變體也有內置關鍵字來聲明使用TLS的變量。

請注意,在上述選項中,您不會自動隔離線程無法破壞其他線程內存的情況。獲得此隔離的唯一方法是產生多個進程(或切換到.NET語言之一併實例化在同一進程中運行的多個AppDomain)。