【发布时间】:2019-11-28 11:21:05
【问题描述】:
我一直在尝试做一些多线程和进程同步。我正在使用 fork 创建一个父进程和一个子进程。
如何实现父子同步以及我必须使用什么类型的同步?
我尝试了互斥锁,但以死锁结束。
// class1 threadfunction
void Class1::threadFunction()
{
while(1)
{
std::cout<<"IN CLASS 1 FUNCTION\n\n";
i++;
sleep(2);
}
}
//class 2 threadfunction
void Class2::threadFunction()
{
while(1)
{
std::cout<<"IN CLASS 2 FUNCTION\n\n";
j++;
sleep(2);
}
}
void Class1::create1()
{
std::thread newThread (threadFunction);
newThread.join();
}
void Class2::create2()
{
std::thread newThread (threadFunction);
newThread.join();
}
//main function
int main()
{
std::cout<<"In Main\n\n";
if(fork())
{
Class1 class1Object;
class1Object.create1();
}
else
{
Class2 class2Object;
class2Object.create2();
}
}
我希望输出是连续的 例如:
IN CLASS 1 FUNCTION
IN CLASS 2 FUNCTION
IN CLASS 1 FUNCTION
IN CLASS 2 FUNCTION
IN CLASS 1 FUNCTION
IN CLASS 2 FUNCTION
IN CLASS 1 FUNCTION
IN CLASS 2 FUNCTION
。 . . .
【问题讨论】:
-
您是否有理由要创建一个新进程(使用 fork)?仅使用 threads 进行 multithreading 还不够吗?
-
你需要有 2 个事件对象。每个线程都向另一个发出信号事件并等待自身事件。如果你想订购
-
@LorenzZhao 我的函数中有一个 while(1) 循环,如果它卡在第一个线程中,我怎么可能创建 2 个线程?
-
@ShreekarGowrishankar:从你的 createN 方法中取出 .join() 调用。为了给您一个工作示例,您应该进一步指定您想要实现的目标。 (仅获得顺序输出不需要多线程。)您的目标是并行化一些长时间运行的东西(示例代码中的 sleep(2) )并获得同步的结果(在您的情况下是交替的)?
标签: c++ multithreading c++11 fork semaphore