2012-07-20 84 views
1

確保一個代碼區域只能由一個pthread執行的最簡單方法是什麼?POSIX線程 - 只做一次

假設有n線程(n不等於1)

// do this once 
int x; 
x = some_function(); 
printf("%d\n", x); 

我是否使用共享變量和阻擋?讓所有變量將其線程ID(?)分配給共享變量,然後寫入變量的最後一個線程可以是主線程?然後在程序的後面,你可以檢查線程ID對共享變量?

非常感謝。

非常感謝。

回答

5

嘗試pthread_once()函數。這是爲了這個明確的目的。 http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_once.html

您將使用共享變量來存儲結果。爲了確保變量穩定,可以使用互斥量來封裝pthread_once()。所有線程都需要鎖定和解鎖互斥鎖,而大多數線程在中間不會執行任何操作,但這樣可以確保變量在允許任何線程繼續之前完全更新。

+0

如何獲取我想要被調用一次的函數的返回值?我將編輯問題清楚...謝謝:)。 – ale 2012-07-20 13:58:05

+0

[man](http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_once.html)說:_第一次調用pthread_once()...應該調用沒有參數的init_routine。使用相同的once_control隨後調用pthread_once()不應調用init_routine._ **有必要使用互斥_wrap _wrap pthread_once() – user454322 2014-08-29 18:07:36