当前位置: 首页 > wzjs >正文

辽宁省营商环境建设监督局网站在哪里推广网站

辽宁省营商环境建设监督局网站,在哪里推广网站,金泉网做的山东黄锈石网站有哪些,那些网站可以做反链在POSIX线程(pthread)库中,线程的终止和管理涉及多个关键函数。以下是关于线程终止的pthread系列函数的详细介绍: 1. pthread_exit:线程主动退出 ✨ 功能: 允许线程主动终止自身,并返回一个退出…

在POSIX线程(pthread)库中,线程的终止和管理涉及多个关键函数。以下是关于线程终止的pthread系列函数的详细介绍:


1. pthread_exit:线程主动退出

功能
允许线程主动终止自身,并返回一个退出状态。

函数原型

void pthread_exit(void *retval);

参数

  • retval:线程的退出状态,可由其他线程通过pthread_join获取。

使用场景

  • 线程完成任务后正常退出。

  • 替代return语句,明确表示线程终止。

示例

#include <pthread.h>
#include <stdio.h>void* thread_func(void* arg) {printf("Thread is exiting...\n");pthread_exit((void*)42); // 退出状态为42return NULL; // 不会执行到这里
}int main() {pthread_t tid;void* exit_status;pthread_create(&tid, NULL, thread_func, NULL);pthread_join(tid, &exit_status);printf("Exit status: %ld\n", (long)exit_status); // 输出42return 0;
}

2. pthread_cancel:请求取消线程

功能
向目标线程发送取消请求,但线程是否终止取决于其取消状态和类型。

函数原型

int pthread_cancel(pthread_t thread);

参数

  • thread:目标线程的标识符。

返回值

  • 成功返回0,失败返回错误码。

关键点

  • 线程默认启用取消(PTHREAD_CANCEL_ENABLE),但需到达取消点(如sleepread等)才会响应。

  • 可通过pthread_setcancelstatepthread_setcanceltype配置取消行为。

示例

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>void* thread_func(void* arg) {// 设置取消类型为异步(立即响应)pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);while (1) {printf("Running...\n");sleep(1);}return NULL;
}int main() {pthread_t tid;pthread_create(&tid, NULL, thread_func, NULL);sleep(3);pthread_cancel(tid); // 发送取消请求pthread_join(tid, NULL);printf("Thread terminated.\n");return 0;
}

3. pthread_join:等待线程终止并回收资源

功能
阻塞当前线程,直到目标线程终止,并获取其退出状态。

函数原型

int pthread_join(pthread_t thread, void **retval);

参数

  • thread:目标线程的标识符。

  • retval:接收线程退出状态的指针。

注意事项

  • 若线程已分离(pthread_detach),则不能再调用pthread_join

  • 必须调用此函数避免僵尸线程(资源泄漏)。

示例

pthread_t tid;
void* exit_status;pthread_create(&tid, NULL, thread_func, NULL);
pthread_join(tid, &exit_status); // 等待线程结束
printf("Exit code: %d\n", (int)exit_status);

4. 线程清理函数:pthread_cleanup_pushpthread_cleanup_pop 🧹

功能
注册清理函数,在线程被取消或调用pthread_exit时自动执行资源释放。

函数原型

void pthread_cleanup_push(void (*routine)(void*), void *arg);
void pthread_cleanup_pop(int execute);

使用场景

  • 确保动态分配的内存、文件句柄、锁等资源被正确释放。

示例

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>void cleanup(void* arg) {printf("Cleaning up: %s\n", (char*)arg);free(arg); // 释放资源
}void* thread_func(void* arg) {char* data = malloc(100);sprintf(data, "Allocated memory");pthread_cleanup_push(cleanup, data); // 注册清理函数while (1) {printf("Working with data: %s\n", data);sleep(1);// 若在此处被取消,cleanup函数会自动调用}pthread_cleanup_pop(1); // 弹出并执行清理函数(参数1表示执行)return NULL;
}

5. 取消状态与类型设置 ⚙️

  • pthread_setcancelstate:启用或禁用线程取消。

    int pthread_setcancelstate(int state, int *oldstate);
    

    参数state

    • PTHREAD_CANCEL_ENABLE(默认): 允许取消请求。

    • PTHREAD_CANCEL_DISABLE:忽略取消请求。

  • pthread_setcanceltype:设置取消类型。

    int pthread_setcanceltype(int type, int *oldtype);
    

    参数type

    • PTHREAD_CANCEL_DEFERRED(默认): 延迟取消,需到达取消点。

    • PTHREAD_CANCEL_ASYNCHRONOUS:立即取消(可能破坏数据一致性)。


6. pthread_detach:分离线程 🧑‍💻

功能
将线程标记为分离状态,线程终止后自动释放资源,无需pthread_join

函数原型

int pthread_detach(pthread_t thread);

示例

pthread_t tid;
pthread_create(&tid, NULL, thread_func, NULL);
pthread_detach(tid); // 分离线程

总结与最佳实践 📋

  1. 优先协作式终止
    使用共享变量(如volatile或原子变量)通知线程退出循环,而非强制取消。

  2. 慎用pthread_cancel
    强制取消可能导致资源泄漏,仅在必要时使用,并配合清理函数。

  3. 资源管理
    始终通过pthread_cleanup_push/pop或RAII模式确保资源释放。

  4. 分离与合并的选择

    • 需要获取线程结果 → pthread_join

    • 后台任务无需等待 → pthread_detach

  5. 错误检查
    检查pthread_createpthread_join等函数的返回值,处理潜在错误。


通过合理使用上述函数,可以实现线程的安全终止和资源管理,避免常见的多线程问题如死锁、资源泄漏等。

 

http://www.dtcms.com/wzjs/821816.html

相关文章:

  • 个人做财经类网站军事时事新闻最新消息
  • 做网站的工作有发展空间没有计算机编程与网站建设
  • 辽阳网站建设哪家好wordpress query_vars
  • 我想做一个网站本地信息发布平台
  • 有哪些能做专门接做标书的网站零基础学seo要多久
  • 网站建设公司有前途吗玩家世界网站建设
  • 门户网站为什么衰落宝山网站建设
  • 深圳整站优化wordpress 文章相册
  • wordpress的建站教程网站建设的基础资料
  • 门户网站怎么做seo阿里云网站域名申请
  • 怎么做好营销型网站泰州快速建站模板
  • 甜品网站设计思想自己建设网站模版
  • 厦门市建设安全管理协会网站打开网站的语音播报怎么做
  • 中国网站为什么做的那么丑电子商务网站建设类型
  • 威海网站建设公司wordpress安装语言设置
  • 山西省住房建设厅网站深圳专业做公司网站
  • 个人网站建设方法和过程产品营销型网站建设
  • 网站栏目页怎么做做流量的网站
  • 农业建设项目管理信息系统网站网页设计在安阳工资多少
  • 网站上面添加地图第一次做网站时是怎样的心情
  • 资金盘网站怎么建设自己做网站开发
  • 经典网站设计有做h的小说网站
  • 郑州做商城网站东莞网站建设东莞
  • 如何用api做网站商务网站建设怎样收费
  • 京东建设网站的意义网站地图对网站有什么意义
  • 昌黎建设局网站网站建设优惠
  • 专门做衣服的网站有哪些微信网站特征
  • 把网站从空间删除曲周企业做网站推广
  • 网站鉴赏百度浏览器下载
  • 饿了么企业网站杭州科技公司网站建设