草庐IT

pthread_cond_wait

全部标签

linux - 什么时候调用 pthread_attr_destroy 是安全的?

我在Linux上使用pthreads。从文档中,我不清楚什么时候可以安全地调用pthread_attr_destroy我用来创建新线程的属性?我可以在pthread_create返回后立即执行还是必须等到线程加入或分离?提前致谢,克里斯托夫 最佳答案 thread属性是在pthread_create中复制的,所以应该在pthread_create调用后销毁。需要在此处阅读行间信息http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_create.html:I

linux - Linux 中的 pthread 概念

我对linux中的pthreads有一些疑问:pthread_t是不是类似于int和char的数据类型,说明我们定义的是线程?如果需要,需要多少尺寸?2字节还是4字节?编译器是在该语句之后立即为pthread_tthread1分配内存,还是等到pthread_create()调用?如何设置线程属性,它们的典型用途是什么?能否在pthread_create()调用中只传递一个以上的参数?如果是,怎么做?我有很多这样的想法。也请随时推荐任何好的站点或文档以供阅读。 最佳答案 一一回答问题,但不一定按相同的顺序:pthread_t是不是类

linux - GCC 编译因 pthread 和选项 std=c99 而失败

我有一个无法使用-std=c99编译的示例程序感谢任何帮助#includeintmain(void){pthread_rwlock_tmyLock;return0;}outputofthetwocompiles:gccpthread_test.c[brad@fedora17onbradsmacprosrc]$gccpthread_test.c[brad@fedora17onbradsmacprosrc]$gcc-std=c99pthread_test.c[brad@fedora17onbradsmacprosrc]$gcc-std=c99pthread_test.cpthread_te

c - 将 OpenMP 与 pthreads 混合

我的问题是将OpenMP与pthreads混合使用是否是个好主意。是否有结合这两者的应用程序。混合这两者是一个好习惯吗?或者典型的应用程序通常只使用两者之一。 最佳答案 通常最好只使用其中之一。但至少对我自己而言,我确实经常将两者混合使用,如果操作正确的话是安全的。最常见的情况是我有一个使用pthreads线程化的低级库,但我在使用OpenMP的用户应用程序中调用它。在某些情况下它是不安全的。例如,如果您在退出该线程中的所有OpenMP区域之前终止了该线程。 关于c-将OpenMP与pt

linux - 用非 IO 事件中断 epoll_wait,无信号

当前场景是epoll_wait在几个fds和一个可能的传入消息队列上,我希望epoll_wait下面的循环在IO事件或新消息上执行。我知道的方法:使用time毫秒超时并在循环中首先检查队列使用self-pipetrick当消息可用时从队列代码中获取用标准信号中断系统调用使用epoll_pwait并细化前一点上面的几点都不让我满意,我想知道是否还有其他我没有找到的方法。原因是:在多线程代码中要避免信号,而且不是很可靠Timeoutone消除了epoll的部分好处,仅通过事件唤醒Self-pipetrick看起来是目前最好的方法,但样板代码仍然太多想法? 最佳答

c++ - 我如何判断 pthread_self 是否是进程中的主(第一个)线程?

背景:我正在开发一个被许多程序使用的日志库。我正在为每个线程分配一个人类可读的名称,主线程应该是“main”,但我希望能够从库中检测到该状态,而不需要在每个main()函数的开头编写代码.另请注意:库代码并不总是首先从主线程进入。 最佳答案 这有点可行,具体取决于您所使用的平台,但绝对不是以任何可移植和通用的方式...根据他们的pthread.h,MacOSX似乎是唯一具有直接和记录方法的系统。文件:/*returnsnon-zeroifthecurrentthreadisthemainthread*/intpthread_main

linux - pthread_join 是如何实现的?

我对线程有点陌生,所以你必须原谅这个问题的天真。pthread_join是如何实现的,它是如何影响线程调度的?我总是想象pthread_join是用while循环实现的,只是导致调用线程让步,直到目标线程完成。像这样(非常近似的伪代码):atomicbooldone;thread_run{do_stuff();done=true;}thread_join{while(!done){thread_yield();//basically,makethethreadthatcalls"join"on//ourthreadyielduntilourthreadcompletes}}这是一个准确

linux - Pthread 线程和信号

我在Linux下使用pthread库来创建线程,我有两个关于此类应用程序中信号处理的问题。我知道信号处理程序是进程范围的,这意味着如果我在进程中设置处理程序,每个线程都会有这个信号处理程序,我也知道有pthread_kill函数可以将信号发送到特定的线程。我有一个关于使用例如shellkill命令发送信号的问题,据我所知,如果我输入例如kill-INTPID我将发送SIGINT使用此PID进行处理,如果这是多线程程序,信号将被传递到此进程中的线程之一。第一个问题,我不能保证这个信号会传递给哪个线程,我只能确定它会传递给一个没有信号掩码中的信号的线程?如果是这样的话,如果我使用kills

c - epoll_wait : maxevents

intepoll_wait(intepfd,structepoll_event*events,intmaxevents,inttimeout);我对maxevents参数有点困惑。假设我想编写一个可以处理多达10k连接的服务器。那么我会将maxevents定义为10000,还是出于某种原因它应该更低? 最佳答案 Maxevents就是*events指向的structepoll_events数组的长度。如果内核当时有超过该数量的事件要提供给您的程序,它将发现它不应该,因为您不希望在那个特定的_wait中返回那么多。您可能需要为您的程序

linux - 为什么我们需要在poll中调用poll_wait?

在LDD3中,我看到了这样的代码staticunsignedintscull_p_poll(structfile*filp,poll_table*wait){structscull_pipe*dev=filp->private_data;unsignedintmask=0;/**Thebufferiscircular;itisconsideredfull*if"wp"isrightbehind"rp"andemptyifthe*twoareequal.*/down(&dev->sem);poll_wait(filp,&dev->inq,wait);poll_wait(filp,&dev