我是线程新手,使用pthread_join时遇到问题。
这是我的代码:
Ω(nlogn)
我的一个线程完成了他的工作,在第二个完成后,我有一个分段错误。 我的函数find_way_out返回pthread_exit((void *)j);或pthread_exit(0); 其中j是整数指针。 你知道它可以来自哪里吗?
谢谢!
答案 0 :(得分:1)
问题是你应该将指向实际pthread_t
变量的指针作为pthread_create
的第一个参数传递,作为模拟按引用传递的方式,{{1然后将初始化对象。
由于您传递了未初始化的指针,因此当pthread_create
取消引用指针时,您将undefined behavior。当您尝试取消引用pthread_create
调用的指针时,你也会拥有它。
更糟糕的是,因为你只为一个 pthread_join
对象分配空间,所以你将超出“数组”的范围。
然后对于pthread_t
循环,您将pthread_join
为一个小的正数,而j
是一个负数,这意味着您的循环将迭代很多< / em>因为它必须迭代直到i
溢出并变为负数,然后继续循环直到j
等于j
。
相反,我建议这些改变:
-1
对象pthread_t
循环像
这样的东西for