我正在研究一個多線程程序,並且有一個關於在哪裏定義互斥量的問題。C在哪裏定義一個多線程程序中的互斥量?
相關信息:該程序有main.c
根據用戶輸入確定特定操作。主要調用位於名爲master.c
的文件中的master_function。在master.c
文件中,我們沿着一些其他操作(不相關)創建了N個線程。這些線程調用名爲son_threads的函數,該函數位於son.c
文件中,並且他們在進入臨界區域時需要使用互斥體(編輯多個全局變量以防止競爭條件)。另一個文件是type.h
,我定義了幾個我需要使用的全局變量。
互斥的聲明是:
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
於是,我就在我的type.h
所以它的son.c
文件可見來定義互斥。當我嘗試編譯時,它給我錯誤。這是正確的,因爲我在多個文件中定義了該互斥鎖。
但我確定我不能在son.c
文件中定義互斥體,因爲每次創建該線程時,互斥體都將初始化爲默認設置,不允許我正確使用它。不確定這一點。
互斥量必須是一個全局變量,其中N個線程可以訪問它。那麼我應該把它放在哪裏?
我不知道我是否正確地解釋自己。盡我所能。
好吧,我明白你的意思。讓我看看它是如何運作的。感謝您的建議! – Alessandroempire
在這裏,我不認爲帶有'GLOBAL'的遊戲有很大的作用。您需要'.h'文件中的聲明和'.c'中的初始化*中的定義*。 'pthread_mutex_t'的默認初始化不會。 –
@JensGustedt這就是我剛剛做的,它的工作。我沒有注意到我正在初始化.h文件中的互斥體。巨大的錯誤。 – Alessandroempire