yot*_*moo 5 c++ locking pthreads
我正在开发一个项目,其中我有一个主线程和一个守护程序线程来执行文件输出.在我的主线程中,我有一个pthread_t * _daemon我想删除的字段,但显然只有在_daemon返回NULL之后(我明白使用pthread_exit()导致内存泄漏).
如果没有忙碌等待,我该怎么办呢?如果我尝试使用条件变量我有一个问题 - 当我调用signal()窗体_daemon唤醒我的主线程时,它会_daemon在它_daemon返回NULL 之前删除.
我所做的只是使用在程序启动时锁定的互斥锁,并在_daemon返回之前解锁.有没有更好的方法不会导致繁忙的等待?
pthread_detach()做你想要的.听起来它会解决你的问题(没有泄漏),复杂性更低!
因此,pthread_detatch(_daemon)当您在另一个线程内完成它时,您可以安全地调用,而不必担心线程本身是否仍在运行.它并没有终止线程,而是会导致线程被清理时,它不会终止.
从文档:
该
pthread_detach()函数应向实现指示当该线程终止时可以回收线程线程的存储.如果线程尚未终止,则pthread_detach()不应使其终止.
实际上,您可以通过设置以下内容创建处于分离状态的线程attr:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
Run Code Online (Sandbox Code Playgroud)
适当的创造时间.该pthread_create()联机帮助页说:
当分离的线程终止时,其资源会自动释放回系统.[ snip ]使线程分离对某些类型的守护程序线程很有用,这些守护程序线程的退出状态是应用程序不需要关心的.默认情况下,在可连接状态下创建新线程,除非将attr设置为以分离状态创建线程(使用pthread_attr_setdetachstate(3)).
| 归档时间: |
|
| 查看次数: |
378 次 |
| 最近记录: |