Google C++多线程面试题
有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推………现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:
A:1 2 3 4 1 2….
B:2 3 4 1 2 3….
C:3 4 1 2 3 4….
D:4 1 2 3 4 1….
请设计程序。
网上居然少有合适答案,有个别还行,但是很繁琐(面试时间有限,不会只有一题)。下面是我的答案。
#include <thread>
#include <mutex>
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
struct SBufferInfo
{
string _buffer;
mutex _m;
int _prevID;
}buffers[4];
void worker(int t)
{
for (int j = 0; j < 10; j++)
{
for (int i = 0; i < 4;)
{
lock_guard<mutex> lk(buffers[i]._m);
if (t == (buffers[i]._prevID + 1) % 4)