繁体   English   中英

在Ubuntu上的C ++中使用pthreads时。 主线程作用域在哪里开始和结束?

[英]When using pthreads in C++ on Ubuntu. Where does the main thread scope start and end?

所以我不会立即在这里发布代码,因为我是一名学生,并且知道我的代码目前很丑陋,在这种情况下非常大。

问题1:这就是说,我试图给自己的处境带来更多麻烦,而不是让别人找到解决我问题的办法。 就是说,对于初学者来说,我只是在寻找在类的成员函数中调用pthread_create函数时主线程作用域的生存期问题的简单答案。 该成员函数是否充当主线程,该主线程是否进入该成员函数内调用的其他成员函数? 还是主线程甚至离开该函数,例如,如果该函数是在另一个函数的循环中调用,那么主线程是否会存在于该外部函数中,提醒pthread_create函数是在循环中的某个函数中调用的一个外部功能?

问题2:由于我需要使用包装器来使被调用方函数与类成员一起工作,我将在包装器函数或包装函数中使用pthread_exit吗? 以此方式完成工作时,对事物结构的任何见解都可能与没有类的情况有所不同。

问题3:设置好了,我试图将我的线程ID存储为类中无符号长整数的数组,但是每当我尝试在pthread_join函数中使用其中之一时,它就会中断。 是否需要是pthread_t'的数组? pthread_t和无符号long有什么区别?

提醒您,我不是专业人士,请在回答时尽量考虑到这一点,在此先感谢。

1-Pthread创建是完全异步的操作。 您的主线程进行创建调用,该调用根据给定的参数启动新线程,并立即返回以执行下一行代码。 该主线程继续运行,否则将不考虑新创建的线程。 同时,新线程并行执行。 您似乎对范围界定感到困惑。 简而言之,新线程将继续存在直到退出,而不管它在哪个范围内创建(例如,在循环内)。 同样,主线程范围也没有区别。 它只是启动新线程并继续进行,就好像什么都没发生一样。 通常,它们完全不知道彼此的存在,它们只是共享您的进程的内存空间。

3-类型为pthread_t,因此应将其存储。 除非有充分的理由,否则请始终避免将一种类型存储为其他类型。 这可能会回答您有关差异的问题( http://www.ibm.com/support/knowledgecenter/ssw_i5_54/apis/concep17.htm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM