Linux线程同步之互斥量(mutex)
作者:网络转载 发布时间:[ 2013/7/2 10:45:29 ] 推荐标签:
下面是一个测试代码,模拟同步问题中经典的生产者消费者问题。
#include <iostream>
#include <queue>
#include <cstdlib>
#include <unistd.h>
#include <pthread.h>
using namespace std;
pthread_mutex_t mutex;
queue<int> product;
void * produce(void *ptr)
{
for (int i = 0; i < 10; ++i)
{
pthread_mutex_lock(&mutex);
product.push(i);
pthread_mutex_unlock(&mutex);
//sleep(1);
}
}
void * consume(void *ptr)
{
for (int i = 0; i < 10;)
{
pthread_mutex_lock(&mutex);
if (product.empty())
{
pthread_mutex_unlock(&mutex);
continue;
}
++i;
cout<<"consume:"<<product.front()<<endl;
product.pop();
pthread_mutex_unlock(&mutex);
//sleep(1);
}
}
int main()
{
pthread_mutex_init(&mutex, NULL);
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, consume, NULL);
pthread_create(&tid2, NULL, produce, NULL);
void *retVal;
pthread_join(tid1, &retVal);
pthread_join(tid2, &retVal);
return 0;
}
运行结果如下:
consume:0
consume:1
consume:2
consume:3
consume:4
consume:5
consume:6
consume:7
consume:8
consume:9
上述代码,consume在判断队列中是否有数据的时候是通过轮询的方式进行的,这种行为很浪费CPU资源,可以通过条件变量来解决这个问题。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11