C++ C、C和x2B中的螺纹+;,C++;0x、pthread和boost
关于C/C++中线程的一个问题 C++0x语法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,
#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)的实现。。。