[C++]多线程队列实现

1、多线程队列实现

void initSrand()  //微秒级随机种子
{
	LARGE_INTEGER start;
	QueryPerformanceCounter(&start);
	srand(unsigned(start.LowPart));
}

void initSrand1()   //毫秒级随机种子
{
	struct timeb tb;
	ftime(&tb);
	srand(unsigned(tb.millitm));
}

int cap=10;
deque<int> de;
condition_variable cv;
mutex mtx;

bool enqueue(int v)
{
		
	unique_lock<mutex> lk(mtx);
	while (de.size() >= cap)
	{
		cout << "deque is full... " << endl;
		cv.wait(lk);
	}			
	de.push_back(v);		
	cv.notify_all();
	return true;
}

int dequeue()
{
	unique_lock<mutex> lk(mtx);
	while (de.size() == 0)
	{
		cout << "deque is empty... " << endl;
		cv.wait(lk);
	}
	int tmp = de.front();
	de.pop_front();
		
	cv.notify_all();
	return tmp;
}

void fen()
{
	while (1)
	{
		Sleep(1000);
		initSrand();
		//initSrand1();
		int tmp = rand();
		enqueue(tmp);
		cout << "push " << tmp << endl;
	}
}

void fde()
{
	while (1)
	{
		Sleep(1000);
		int tmp=dequeue();
		cout << "pop " << tmp << endl;
	}
}


int main()
{	
	const int num1 = 10;
	const int num2 = 5;
	thread arr1[num1];
	thread arr2[num2];
	for (int i = 0; i < num1; i++)
	{
		arr1[i] = thread(fen);
	}
	for (int i = 0; i < num2; i++)
	{
		arr2[i] = thread(fde);
	}
	for (int i = 0; i < num1; i++)
	{
		arr1[i].join();
	}
	for (int i = 0; i < num2; i++)
	{
		arr2[i].join();
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值