多线程编程(二)(李慧芹)
2023-04-22 10:59:53 时间
(37条消息) 互斥锁(mutex)_清风徐来Groot的博客-CSDN博客
Linux中提供一把互斥锁mutex(也称之为互斥量)。 每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁。 但通过“锁”就将资源的访问变成互斥操作,而后与时间有关的错误也不会再产生了。
1、主要应用函数:
pthread_mutex_init() | 初始化一个互斥锁 |
pthread_mutex_destroy() | 销毁一个互斥锁 |
pthread_mutex_lock() | 加锁 |
pthread_mutex_trylock() | 尝试加锁 |
pthread_mutex_unlock() | 解锁 |
1.1 互斥锁的初始化的两种方式:静态初始化和动态初始化
静态初始化:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
动态初始化:pthread_mutex_init(&mutex, NULL);
例一:
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
void *func(void *arg)
{
while (1)
{
printf("hello ");
/*模拟长时间操作共享资源,导致cpu易主,产生与时间有关的错误*/
sleep(1);
printf("world
");
sleep(1);//睡眠,释放cpu
}
return NULL;
}
int main(void)
{
pthread_t tid;
pthread_create(&tid, NULL, func, NULL);
while (1)
{
printf("HELLO ");
sleep(1);
printf("WORLD
");
sleep(1);
}
return 0;
}
例二:
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
pthread_mutex_t mutex; //定义锁
void *func(void *arg)
{
while (1) {
pthread_mutex_lock(&mutex); //加锁
printf("hello ");
sleep(1); /*模拟长时间操作共享资源,导致cpu易主,产生与时间有关的错误*/
printf("world
");
pthread_mutex_unlock(&mutex); //解锁
sleep(1);//睡眠,释放cpu
}
return NULL;
}
int main(void)
{
pthread_t tid;
pthread_mutex_init(&mutex, NULL); //初始化锁 mutex==1
pthread_create(&tid, NULL, func, NULL);
while (1)
{
pthread_mutex_lock(&mutex); //加锁
printf("HELLO ");
sleep(1);
printf("WORLD
");
pthread_mutex_unlock(&mutex); //解锁
sleep(1);
}
pthread_mutex_destroy(&mutex); //销毁锁
return 0;
}
相关文章
- 图片解释CA,服务器,客户端如何完成证书验证,也就是HTTPS是如何保证的
- 从Deserialization和覆盖trustURLCodebase进行JNDI注入
- 搭建Nacos集群
- 行为管理(锐捷云桌面1)
- OpenGL 单色
- MAUI新生3.3-深入理解XAML:控件模板ControlTemplate
- XMind 2022软件 及2000+最全模板素材大全 ( 12.5 亲测有效 )
- SpringBooot整合spring Data JPA多数据源
- Windows OpenGL 图像单色
- [oeasy]python0024_unix时间戳_epoch_localtime_asctime_PosixTime_unix纪年法
- Power BI 14 DAY
- DigitalKey UWB MAC
- RocketMQ 5.0 可观测能力升级:Metrics 指标分析
- 21套云原生实战训练营K8s Kubernetes集群视频教程下载Jenkins CI/CD版本上线流程部署
- 产品速递 | 璞华易投「投资人报告」平台,让投资人运筹帷幄,精准把控投资绩效
- 1月│相约苏州,2023年纯数学、应用数学与计算数学国际学术会议
- 易基因|ChIP-seq等实验揭示CHD6转录激活前列腺癌通路的关键功能 | 肿瘤耐药研究
- Log4Shell 漏洞披露已近一年,它对我们还有影响吗?
- Kubernetes(K8S) helm chart
- 行为管理(锐捷安全篇2)