スレッドを開始するときにスレッドを作成する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