C语言怎么让一个线程停止
时间: 2024-09-13 08:19:04 浏览: 43
C语言如何正确的终止正在运行的子线程
在C语言中,标准库并没有直接提供线程的原生支持,而是通过POSIX线程库(pthreads)或者其他平台相关的API来处理线程。如果你想在一个线程中设置它停止,通常你会创建一个标记或者条件变量来控制线程的行为。
例如,你可以这样做:
```c
#include <pthread.h>
#include <semaphore.h>
void *thread_function(void *arg) {
int *stop_signal = (int *)arg;
while (*stop_signal != 1) { // 当*stop_signal变为1时,退出循环
// ... 这里是线程执行的任务
pthread_yield(); // 让出CPU,其他任务执行
}
return NULL;
}
int main() {
sem_t stop_sem; // 创建一个信号量作为停止标志
if (sem_init(&stop_sem, 0, 0)) {
perror("Sem init failed");
exit(1);
}
int stop = 0; // 初始值为0,表示未停止
pthread_t thread_id;
if (pthread_create(&thread_id, NULL, thread_function, &stop) != 0) {
perror("Thread creation failed");
exit(1);
}
// 后续可以改变stop的值来让线程停止
stop = 1;
sem_post(&stop_sem); // 发送一个信号通知线程停止
pthread_join(thread_id, NULL); // 等待线程结束
sem_destroy(&stop_sem); // 销毁信号量
return 0;
}
阅读全文