我有一個c程序在啓動時創建一個線程。線程的目的是在指示時將固件刷新到設備。所以當線程啓動的時候它等待一個信號量和一個點,主應用程序將sem_post(&semaphore);
發佈到線程中的信號量,線程將完成它的任務。當你使用信號量時,你能從c中的線程返回一個值嗎?
有時候這個任務可能會失敗(如果有硬件問題)。我的問題是我可以從線程返回一個值到信號量發佈到主應用程序的位置嗎?固件閃爍通過system()
完成,結果返回到int變量res
。我想把這個值返回給主應用程序?
這裏是螺紋:
static void *flash_firmware(void *param) {
int res;
char thread_Buf[SM_BUF];
printf("Started thread\r\n");
while(running == 1) {
sem_wait(&semaphore);
if(running == 1) {
printf("*************Flashing firmware*************\r\n");
snprintf(thread_Buf, SM_BUF, prog_path_printf,
programmingPtr->binary_filename, programmingPtr->debugger_serialnumber);
res = system(thread_Buf); //flash firmware
}
else
printf("Exiting thread \r\n");
}
return NULL;
}
這裏是main()
,我創建線程的一個片段。
#define THREADS 2
pthread_t thread_ID [THREADS];
int volatile running = 1;
sem_t semaphore;
int main(int argc, char *argv[])
{
/initialize semaphores to be used with threads in this process, set value to 0 initially
sem_init(&semaphore, 0, 0);
//create threads for DUTs 1 & 3
pthread_create(&thread_ID[0], NULL, flash_firmware, &programmingPtr);
}
然後,在不同的源文件,sem_post(&semaphore);
被執行,線程將繼續進行。
你可以用任何形式的IPC,管道,一個郵箱,一個插座都這樣做,你選擇。讓main等待或輪詢IPC以獲取線程的結果。當然也有其他方法。 –
未定義的行爲,用於對來自多個線程的對象進行非同步,非只讀,非原子訪問。 – EOF