Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C、C和x2B中的螺纹+;,C++;0x、pthread和boost_C++_Multithreading_C++11_Pthreads_Boost Thread - Fatal编程技术网

C++ C、C和x2B中的螺纹+;,C++;0x、pthread和boost

C++ C、C和x2B中的螺纹+;,C++;0x、pthread和boost,c++,multithreading,c++11,pthreads,boost-thread,C++,Multithreading,C++11,Pthreads,Boost Thread,关于C/C++中线程的一个问题 C++0x语法 #include <thread> void dummy() {} int main(int, char*[]) { std::thread x(dummy); std::thread y(dummy); ... return 0; } #include <pthread.h> void dummy() {} int main(int, char*[]) { pthread_t x,

关于C/C++中线程的一个问题

C++0x语法

#include <thread>

void dummy() {}

int main(int, char*[]) {
   std::thread x(dummy);
   std::thread y(dummy);
   ...
   return 0;
}
#include <pthread.h>

void dummy() {}

int main(int, char*[]) {
   pthread_t x, y;
   pthread_create(&x, NULL, &dummy, NULL);
   pthread_create(&y, NULL, &dummy, NULL);
   ...
   return 0;
}
#include <boost/thread>

void dummy() {}

int main(int, char*[]) {
   boost::thread x(dummy);
   boost::thread y(dummy);
   ...
   return 0;
}
有多少条线?两个(x和y)还是三个(x,y和main)?我可以在main中调用
pthread\u yield()
?在main中调用
pthread\u self()

增强语法

#include <thread>

void dummy() {}

int main(int, char*[]) {
   std::thread x(dummy);
   std::thread y(dummy);
   ...
   return 0;
}
#include <pthread.h>

void dummy() {}

int main(int, char*[]) {
   pthread_t x, y;
   pthread_create(&x, NULL, &dummy, NULL);
   pthread_create(&y, NULL, &dummy, NULL);
   ...
   return 0;
}
#include <boost/thread>

void dummy() {}

int main(int, char*[]) {
   boost::thread x(dummy);
   boost::thread y(dummy);
   ...
   return 0;
}
#包括
void dummy(){}
int main(int,char*[]){
boost::线程x(虚拟);
boost::线程y(虚拟);
...
返回0;
}

有多少条线?两个(x和y)还是三个(x,y和main)?我可以在main中调用
boost::this_-thread::yield()
?在main中调用
boost::this_-thread::get_-id()
可以得到什么?

在每种情况下,您都创建了两个额外的线程,因此有三个线程(x、y和main)。您将在每个线程上获得不同的id,包括在main中的调用。

主线程始终在那里,您将创建其他新线程。如果主线程终止,则程序终止或行为未定义。也可以从很多线程开始,因为运行时可以自己启动(并且通常会启动,就像linux_线程“pthreads”实现)线程


调用yield总是可能的,因为它只是告诉操作系统,如果存在具有相同或更高优先级的线程,它可以将剩余的时间片分配给另一个线程。如果您不编写诸如自旋锁之类的低级同步功能,那么就没有真正的理由在应用程序中调用yield。

以上三种实现都给出了相同的结果。由于std::thread是在“pthread”之上实现的,所以所有线程都将创建三个线程。Main将是您的父线程,其他线程将成为子线程,并且在创建每个线程时具有不同的ID,boost::thread由std::thread的同一作者创建,但添加了一些增强功能。

在第二个示例中,您编写了pthread_t x,t;稍后使用x,y;我猜是打字错误。当一个巨大的问题得到如此简洁的回答时,这是很少见的。不是真的:这是同一个问题的三倍,因为boost版本是基于posix版本的未来标准版本(c++0x)的实现。。。