作爲我第一次真正嘗試使用pthreads,我正在尋找適合已經編寫的我的應用程序來使用線程。「主」線程監控「奴隸」線程的簡單方法
我想到的範例基本上有一個「主」線程,它遍歷待處理的數據項目列表,爲每個線程啓動一個新線程,MAX_THREADS線程在任何給定時間運行(直到數字的剩餘任務少於這個),每個任務在列表中的單個數據元素上執行相同的任務。
主線程需要知道任何線程何時完成其任務並返回(或pthread_exit()'ed),立即啓動一個新線程來執行列表中的下一個任務。
我想知道的是人們喜歡使用這種設計的方法是什麼?拋開數據考慮,最簡單的一組pthread函數用於實現這一點?顯然,pthread_join()是作爲在線程上「檢查」的手段。
早期的實驗已經使用了一個struct,作爲pthread_create()的最後一個參數傳遞,它包含一個名爲「running」的元素,線程在啓動時設置爲true,並在返回之前重置。主線程簡單地檢查循環中每個線程的這個struct元素的當前值。
下面是程序使用的線程管理數據:
typedef struct thread_args_struct
{
char *data; /* the data item the thread will be working on */
int index; /* thread's index in the array of threads */
int thread_id; /* thread's actual integer id */
int running; /* boolean status */
int retval; /* value to pass back from thread on return */
} thread_args_t;
/*
* array of threads (only used for thread creation here, not referenced
* otherwise)
*/
pthread_t thread[MAX_THREADS];
/*
* array of argument structs
*
* a pointer to the thread's argument struct will be passed to it on creation,
* and the thread will place its return value in the appropriate struct element
* before returning/exiting
*/
thread_args_t thread_args[MAX_THREADS];
這是否看起來像一個完善的設計?有更好,更標準化的方法來監視線程的運行/退出狀態,更「線程化」的方式嗎?我期望使用最簡單,最清潔,最乾淨的機制,這不會導致任何意外的併發症。
感謝您的任何反饋意見。
謝謝,鴨子,是的,我喜歡你的建議。但唯一的問題是,我確實需要在設計中進行一定程度的同步。 – 2012-04-15 15:28:01
(oops,點擊輸入太快)主線程需要等待一組完成的奴隸,所以它可以使用它們生成的一些信息來創建一個輸出文件。我認爲我需要對設計進行更多的思考。它*會很好,不會在線程管理中陷入困境,而只是讓一切或多或少地自動合作。將不得不思考這一點。非常感謝。 – 2012-04-15 15:41:46