我很难在线查找有关在C ++中使用线程的信息。我需要程序做的是在main()中创建两个线程。这两个线程从文本文件中指定的句子中取出单词,并根据每个单词的起始字符打印出单词。一个线程应该打印以元音开头的单词,另一个线程应该打印以辅音开头的单词。 main()本身不应该打印任何内容,并且单词的顺序应该与句子保持相同。两个线程需要相互屈服才能实现这一目标。不能使用同步技术。
我将文本文件读入矢量,目前工作正常。我的代码可以完成正确的输出,但不是以指定的方式。如果你能帮助我,我会非常感激。谢谢。
#include <iostream>
#include <thread>
#include <fstream>
#include <string>
#include <iterator>
#include <vector>
#include <sstream>
using namespace std;
void cons(string temp){
if (temp[0] != 'A' && temp[0] != 'a' && temp[0] != 'E'&& temp[0] != 'e'&& temp[0] != 'I'&& temp[0] != 'i'&& temp[0] != 'O'&& temp[0] != 'o'&& temp[0] != 'U'&& temp[0] != 'u') {
cout << "cons: " << temp << endl;
}
this_thread::yield();
}
void vow(string temp){
if (temp[0] == 'A'|| temp[0] == 'a'|| temp[0] == 'E'|| temp[0] == 'e'|| temp[0] == 'I'|| temp[0] == 'i'|| temp[0] == 'O'|| temp[0] == 'o'|| temp[0] == 'U'|| temp[0] == 'u') {
cout << "vow: " << temp << endl;
}
this_thread::yield();
}
int main(){
string sentence, temp;
ifstream ifs;
ofstream ofs;
vector <thread> wordThreads;
ifs.open("phrase.txt");
getline(ifs, sentence);
istringstream s(sentence);
istream_iterator<string> begin(s), end;
vector<string> words(begin, end);
ifs.close();
for (int i=0; i < 5; i++) {
wordThreads.push_back(thread(cons, words[i]));
wordThreads.push_back(thread(vow, words[i]));
}
for (thread& t: wordThreads) // loop with a range variable
t.join();
}
答案 0 :(得分:1)
我知道这是一个古老的主题,但这里的答案是在以下函数中使用Petersons
算法:
loop
flag[i] := true;
turn := j;
while flag[j] and turn = j do nothing;
(critical section of code)
flag[i] := false;
(remainder section of code)
end loop
控制何时基于Bool数组的标志和转向变量进行切换,两者都位于全局共享内存空间中。没有使用互斥锁。