在pthread_create( *thread, *attr, *start_routine, *arg)
中,如果在创建的线程退出之前释放arg
,那么行为是什么?我没有在Open Group的规范中看到它描述,所以它很可能是未定义的,我无法找到一个地方来确认。
答案 0 :(得分:1)
在这方面,pthread并没有什么特别之处,因此您在规范中找不到具体的确认信息。来自Open Group。
您的代码是唯一将取消引用传递给pthread_create的arg
的代码,您负责其使用及其生命周期。
至少这可以通过参数为void *
的合理假设,pthread实现不知道如何安全地解除引用,并且pthread_create的文档没有表明它会检查参数到线程例程。
如果传入一个动态分配的对象并在它被释放后使用它,或者传入指向其生命周期结束的对象的指针,那么使用该对象是未定义的行为,否则就没有问题。关于pthreads或pthread_create的arg
参数没有具体说明。
答案 1 :(得分:0)
释放args,意味着您的程序可以根据需要使用该内存位置。 args的地址是在线程函数中发送的,同时如果你的程序没有触及那个内存位置(这意味着值仍然存在),你会想要在线程内部行为,如果它确实触摸了,你将有未定义的。总的来说,释放args会产生不确定的行为。