C语言线程回调函数,主线程对回调函数的注册,举一个完整的例子
时间: 2024-09-15 22:05:56 浏览: 37
C语言中并没有内置的线程库支持原生的线程回调函数,但是可以借助一些外部库如POSIX线程API(pthread)来实现类似的功能。在POSIX API中,我们通常通过信号量(semaphores)或者事件通知机制(例如条件变量)配合来间接达到类似回调的效果。
下面是一个简单的示例,假设有一个主函数创建了一个工作线程,并希望在工作完成后执行特定的回调函数。这里使用了条件变量作为通信机制:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
// 假设这是你的回调函数
void callback(void* data) {
printf("Callback function received: %s\n", (char*)data);
}
// 主线程的工作
void* worker_thread_func(void* arg) {
// 假设arg用于传递数据到回调函数
char* message = "Work done by worker thread";
// ... 这里做你的工作
pthread_mutex_lock(&callback_mutex); // 获取锁
pthread_cond_signal(&callback_condition); // 设置条件变量,唤醒等待的主线程
pthread_mutex_unlock(&callback_mutex); // 释放锁
return NULL; // 线程结束返回NULL
}
int main() {
pthread_t worker_thread;
pthread_mutex_t callback_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t callback_condition = PTHREAD_COND_INITIALIZER;
if (pthread_create(&worker_thread, NULL, worker_thread_func, (void*)"Worker Thread")) {
perror("Creating worker thread failed");
exit(1);
}
// 等待工作线程完成,然后执行回调
pthread_join(worker_thread, NULL);
// 注册回调函数(这里仅是说明,实际上需要在合适的地方安排)
pthread_mutex_lock(&callback_mutex);
pthread_cond_wait(&callback_condition, &callback_mutex); // 阻塞直到工作完成
callback((void*)"Callback invoked"); // 调用回调
pthread_mutex_unlock(&callback_mutex);
return 0;
}
阅读全文