Linux,C:几秒后终止多线程(计时器?)

Linux,C:几秒后终止多线程(计时器?),第1张

概述Linux,C 我创建了多个线程来运行工作负载,我想在指定的秒/超时后发出停止/终止信号. 我如何用C实现这个? void *do_function(void *ptr){ //calculating, dothe workload here;}int run(struct calculate_node *node){ pthread_t threads[MAX_NUM_ Linux,C
我创建了多个线程来运行工作负载,我想在指定的秒/超时后发出停止/终止信号.
我如何用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:几秒后终止多线程(计时器?)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1026667.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存