int main(int argc, char *argv[])
{
QApplication app(argc,argv);
Productor p;
Customer c;
p.start(); //*
c.start();
p.wait();
c.wait();
return app.exec();
}
单步调试时的顺序是:执行c.start()之后进入Productor类的run()函数。我的疑问是p.start()后p并没有阻塞为什么会执行c.start()而不是直接进入p的run()函数
*多线程理解的不是太好有没有什么可以看的书?
------解决方案--------------------
pthread_crete或beginThread一样的 创建完线程后,可以执行run,也可以继续往下走,取决于各个平台的实现
------解决方案--------------------
创建线程的语句类似调用函数,它们之间的区别是执行流的区别:
函数调用,只要不阻塞就会直到返回才会接着执行后面的语句
创建新线程不一样,创建线程之后,该进程空间中有两个执行流,一个是原来的线程,一个是新线程,它们之间的执行顺序和你的代码没有任何关系,它们之间执行顺序取决于操作系统的调度,因此执行顺序是随机的,如果你控制几个线程之间的执行顺序,你需要使用线程之间的同步机制。
就拿你的代码举个例子:
main
------解决方案--------------------
单一执行流
------解决方案--------------------
------解决方案--------------------
p.start(); 这里创建了新线程,此后就多了一个执行流
------解决方案--------------------
\
------解决方案--------------------
\
------解决方案--------------------
\
原 新
------解决方案--------------------
...
c.start();
...
------解决方案--------------------
取决于CPU的时间片轮询
------解决方案--------------------
1、P.start() 被调用后立即返回了,所以可以执行c.start().
2、p.start()其实你调用的重载的run函数,而这个函数被执行实在一个子线程里执行
------解决方案--------------------
cpu时间片到了,就该哪个了。。
------解决方案--------------------
他们相互之间没有关系,各跑各的,顺序不一定的,你启动线程,线程就和主进程就同时跑了。