电话
400 9058 355
标准C语言无内置多线程支持,pthread是POSIX线程库,需链接-lpthread并包含;传参须确保生命周期覆盖线程全程;joinable线程需pthread_join或设为detached;共享变量必须用mutex保护,避免竞态与死锁。
标准 C 语言本身不提供多线程支持,pthread 是 POSIX 标准下的线程库,不是 C 语言内置功能,必须显式链接 -lpthread 且包含 。
常见错误是直接传栈变量地址,线程还没开始执行,主线程已退出该作用域,导致未定义行为。
malloc 分配的堆内存、全局/静态变量,或主线程同步等待(如 pthread_join)后再释放pthread_create(&t, NULL, func, &local_var);改用 int *p = malloc(sizeof(int)); *p = local_var; pthread_create(..., p);
void *,接收后需强制转回原类型,例如 int val = *(int *)arg;
pthread_create 创建的线程默认是“可连接的(joinable)”,退出后内核保留其退出状态,直到另一线程调用 pthread_join。否则会泄漏资源,类似进程中的僵尸进程。
pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create(&t, &attr, ...);
pthread_detach(t);,但要确保 t 有效且未被 join 过pthread_join(t, &retval) 会阻塞,直到 t 终止;retval 可为 NULL
C 语言没有原子操作保证(C11 是例外),普通 int counter++ 在多线程下不是原子的——它包含读、加、写三步,可能被中断并交错执

pthread_mutex_t 保护临界区:声明为全局或静态,用 pthread_mutex_init 初始化(或 PTHREAD_MUTEX_INITIALIZER)pthread_mutex_lock,结束后立即 pthread_mutex_unlock
printf 不推荐在锁内调用)static int counter; 仍是共享的,即使声明在函数内最常被忽略的是:忘记初始化互斥量、忘记销毁(pthread_mutex_destroy)、在 fork 后子进程中继续使用父进程创建的线程或锁——这些都会引发难以复现的崩溃或数据错乱。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...