我创建了多个线程来运行工作负载,我想在指定的秒/超时后发出停止/终止信号.
我如何用C实现这个?
voID *do_function(voID *ptr){ //calculating,dothe workload here;}int run(struct calculate_node *node){ pthread_t threads[MAX_NUM_THREADS]; for (t = 0; t < node->max_threads; t++) { rc = pthread_create(&threads[t],NulL,do_function,(voID*)node); if(rc) return -1; } //how do I create timer here to fire to signal those threads to exit after specifIEd seconds? for (t = 0; t < node->max_threads; t++) { pthread_join(threads[t],NulL); } free(threads);}
谢谢!
解决方法 不确定是否有一种可移植的方式来创建一个计时器事件,但如果main没有其他任何事情要做,它可能只是简单地调用sleep来浪费时间.至于信令线程,您有两种选择:协作终止或非协作终止.通过协作终止,线程必须定期检查标志以查看它是否应该终止.使用非协作终止,您可以调用pthread_cancel来结束线程. (有关可以用于正常结束线程的其他函数的信息,请参阅pthread_cancel的手册页.)
我发现合作终止更容易实现.这是一个例子:
#include <stdio.h>#include <pthread.h>#include <unistd.h>static int QuitFlag = 0;static pthread_mutex_t QuitMutex = PTHREAD_MUTEX_INITIAliZER;voID setQuitFlag( voID ){ pthread_mutex_lock( &QuitMutex ); QuitFlag = 1; pthread_mutex_unlock( &QuitMutex );}int shouldQuit( voID ){ int temp; pthread_mutex_lock( &QuitMutex ); temp = QuitFlag; pthread_mutex_unlock( &QuitMutex ); return temp;}voID *somefunc( voID *arg ){ while ( !shouldQuit() ) { fprintf( stderr,"still running...\n"); sleep( 2 ); } fprintf( stderr,"quitting Now...\n" ); return( NulL );}int main( voID ){ pthread_t threadID; if ( pthread_create( &threadID,somefunc,NulL) != 0 ) { perror( "create" ); return 1; } sleep( 5 ); setQuitFlag(); pthread_join( threadID,NulL ); fprintf( stderr,"end of main\n" );}总结
以上是内存溢出为你收集整理的Linux,C:几秒后终止多线程(计时器?)全部内容,希望文章能够帮你解决Linux,C:几秒后终止多线程(计时器?)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)