(C ++) 是否有可能在不使用线程的情况下运行两个并行的while循环?我已经尝试将它们一个接一个地放在一个for循环中,但它对我不起作用,因为我在条件中使用的变量在第一个循环中被改变了,我需要它们对于两个都是相同的循环。 这是代码:
for (size_t j = 0; j < word.length(); j++)
{
while (word[j] != tmp->data)
{
counter1++;
tmp = tmp->next;
}
while (word[j] != tmp->data)
{
counter2++;
tmp = tmp->previous;
}
}
答案 0 :(得分:1)
来自评论:
我从一个字符串中获取该字母并试图找出哪个路径更短,以便在字母,前进或后退中找到相同的字母。我正在使用周期性双向链表。
听起来你只想要一个带有两个while
指针的tmp
循环:
for (size_t j = 0; j < word.length(); j++)
{
while (word[j] != tmp1->data && word[j] != tmp2->data)
{
counter++;
tmp1 = tmp1->next;
tmp2 = tmp2->previous;
}
}
答案 1 :(得分:0)
如果没有线程,这是不可能的(或者你可以使用进程间但我想这不是你的意思)
您可以使用std::future
和std::async
您可以将每个搜索设为这样的函数:
int forward(std::string word)
{
int counter = 0;
for (size_t j = 0; j < word.length(); j++)
{
while (word[j] != tmp->data)
{
counter++;
tmp = tmp->next;
}
}
return counter;
}
或相应的backwards
并像这样打电话给他们。
std::string word = //....
auto res1 = std::async(std::launch::async, forward,word);
auto res2 = std::async(std::launch::async, forward,word);
//do whatever....
int counter1 = res1.get(); //get the result
int counter2 = res2.get();
请注意,get
将阻塞,直到线程完成。但它们会并行运行。
在你的情况下,取决于字符串/字母表和算法的大小,但我怀疑你在多线程中做这件事会带来很多好处。线程开销可能需要比整个计算更长的时间,因此您应该测量这种单线程是否更快。