写一段C++代码,定义一个函数,该函数需要反复被调用N次,其中主线程耗时比子线程短,要求主线程跑完立即返回,而子线程执行至结束,下一个循环开始时,新的主线程必须等待上一个子线程跑完再开始
时间: 2023-05-16 07:05:30 浏览: 159
Qt_multi_threads:Qt最简单的多线程,开启了两个完全独立的子线程,主线程睡眠都不影响
以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void* child_thread(void* arg) {
int* num = (int*)arg;
printf("Child thread: %d\n", *num);
sleep(1); // 模拟子线程执行耗时操作
free(num);
pthread_exit(NULL);
}
void main_thread(int n) {
printf("Main thread: %d\n", n);
}
int main() {
int N = 5;
pthread_t tid;
for (int i = 0; i < N; i++) {
int* num = (int*)malloc(sizeof(int));
*num = i;
if (pthread_create(&tid, NULL, child_thread, num) != 0) {
perror("pthread_create error");
exit(1);
}
main_thread(i);
if (pthread_join(tid, NULL) != 0) {
perror("pthread_join error");
exit(1);
}
}
return 0;
}
```
在上面的代码中,我们使用了 pthread 库来创建子线程。在主线程中,我们先打印出当前循环的计数器 i,然后创建一个子线程,将 i 作为参数传递给子线程。接着,主线程立即返回,开始下一轮循环。在子线程中,我们先打印出当前的参数值,然后模拟子线程执行耗时操作,最后释放参数内存并退出线程。在主线程中,我们使用 pthread_join 函数来等待子线程执行完毕,然后开始下一轮循环。这样,我们就实现了主线程和子线程的交替执行,且主线程不会等待子线程执行完毕。
阅读全文