【发布时间】:2013-11-27 19:51:30
【问题描述】:
我的程序读入两个输入文件,并交替向输出文件写入行。我有它,所以它以正确的顺序写入(第一个文件,然后是第二个,然后是第一个,......)但问题是它在每个文件的最后一个字符写入两次。
#include <iostream>
#include <fstream>
#include <thread>
#include <mutex>
using namespace std;
mutex mtx;
int turn = 1;
void print_line(ifstream * in_stream, ofstream * out_stream, int t);
int main(int argc, const char * argv[]){
ifstream input_file_1;
ifstream input_file_2;
ofstream output_file;
input_file_1.open("input_1");
input_file_2.open("input_2");
output_file.open("output");
if (input_file_1.fail() || input_file_2.fail() || output_file.fail()) {
cout << "Error while opening the input files\n";
exit(EXIT_FAILURE);
}
else{
thread input1 (print_line, &input_file_1, &output_file, 1);
thread input2 (print_line, &input_file_2, &output_file, 2);
input1.join();
input2.join();
}
input_file_1.close();
input_file_2.close();
output_file.close();
return 0;
}
void print_line(ifstream * in_stream, ofstream * out_stream, int t){
char temp;
while (!in_stream->eof()) {
mtx.lock();
if (turn == t) {
*in_stream>>temp;
*out_stream<<temp;
if (turn == 1) {
turn = 2;
}
else{
turn = 1;
}
}
mtx.unlock();
}
}
输入 1
a
c
e
输入 2
b
d
f
输出
abcdefef
我不知道为什么它会再次写入最后一个字符,还有更好的方法来使用线程进行排序部分,我知道使用互斥锁来确保两个线程不会同时写入,但是如何保证线程 1 在线程 2 之前执行并确保它保持交替?
谢谢
【问题讨论】:
标签: c++ multithreading