c++11果然非常强大,没想到自带了thread类,这样在windows上就省去了很多不必要的麻烦。
下面是一个简单的交替卖票的demo,每个线程里面有加入了互斥锁
#include "iostream"
#include "thread"
#include "vector"
#include "string"
#include "mutex"
#include "windows.h"
using namespace std;
int ticket = 100;
mutex g_mutex;
void thread1()
{
while (true)
{
g_mutex.lock();
if (ticket > 0)
{
//Sleep(10);
--ticket;
cout << "1机卖出一张票:" << ticket << endl;
g_mutex.unlock();
Sleep(10);
}
else
{
g_mutex.unlock();
break;
}
}
// g_mutex.unlock();
}
void thread2()
{
//lock_guard<mutex> lg(g_mutex);
while (true)
{
g_mutex.lock();
if (ticket > 0)
{
// Sleep(10);
--ticket;
cout << "2机卖出一张票:" << ticket << endl;
g_mutex.unlock();
Sleep(10);
}
else
{
g_mutex.unlock();
break;
}
}
}
int main() {
thread t2(thread2);
thread t1(thread1);
t1.join();
t2.join();
return 0;
}
本来把Sleep放在锁的里面,得出的结果是t2线程独占买票,想了一下,感觉是Sleep的问题,把Sleep放外面后果然正确了。
多线程编程的确复杂,虽然只掀开了冰山一角,便感受到了里面的奇妙