我有一个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