Linux线程学习笔记

线程

进程

进程是程序执行时的一个实例,是担当分配系统资源的基本单位。一个进程在同一时刻只能做一件事情。

进程有独立的空间

进程是线程的容器

线程

线程有自己的堆栈和局部变量,但线程没有单独的地址空间

优点:1.节俭的多任务操作方式 2.方便的通信机制

pthread库支持

基本概念:

线程
创建 pthread_create
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
退出 pthread_exit

1)线程只是从启动例程中返回,返回值是线程的退出码。

2)线程可以被同一进程中的其他线程取消。

3)线程调用pthread_exit:

#include <pthread.h>
int pthread_exit(void *rval_ptr);
等待 pthread_join
#include <pthread.h>
int pthread_join(pthread_t thread, void **rval_ptr);
// 返回:若成功返回0,否则返回错误编号

其他

线程脱离

#include <pthread.h>
int pthread_detach(pthread_t thread);
// 返回:若成功返回0,否则返回错误编号c

线程ID获取和比较

#include <pthread.h>
pthread_t pthread_self(void);
// 返回:调用线程的ID
#include <pthread.h>
int pthread_equal(pthread_ct tid1, pthread_t tid2);
// 返回:若相等则返回非0值,否则返回0
互斥锁

互斥量(mutex)本质上是一把锁,在访问共享资源前对加锁,在访问完成后释放锁。

创建 pthread_mutex_init
销毁 pthread_mutex_destroy
#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
// 返回:若成功返回0,否则返回错误编号
加锁 pthread_mutex_lock
解锁 pthread_mutex_unlock
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
// 返回:若成功返回0,否则返回错误编号
条件
创建 pthread_cond_init
销毁 pthread_cond_destroy
#include <pthread.h>
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
int pthread_cond_destroy(pthread_cond_t *cond);
// 返回:若成功返回0,否则返回错误编号
触发 pthread_cond_signal
广播 pthread_cond_broadcast
#include <pthread.h>
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);
// 返回:若成功返回0,否则返回错误编号
等待 pthread_cond_wait/ pthread_cond_timedwait
#include <pthread.h>
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, cond struct timespec *restrict timeout);
// 返回:若成功返回0,否则返回错误编号

互斥锁进入死锁怎么办

死锁

互斥锁使用不当,多个线程无法进行下一步代码运行。

有两个及以上锁,当线程A获得锁1想去拿锁 2,但线程B获得了锁2想去拿锁1,就会产生死锁。

线程宏初始化 静态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值