首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程编程

多线程编程
EN

Stack Overflow用户
提问于 2010-04-16 04:15:37
回答 2查看 391关注 0票数 0

是否有一个函数调用可以与特定的线程相关联,以使线程运行或等待?我的程序中有4个线程,我正在试图找出一种方法来告诉任何一个线程在我想要的时候等待或运行。

EN

回答 2

Stack Overflow用户

发布于 2010-04-16 04:32:42

你的问题很笼统。这实际上可以归结为:查看pthread文档。

如果您想让线程A等待线程B完成,请查看pthread_join()

如果你想让线程A等待,直到线程B说可以继续,你将需要一个互斥锁和一个条件变量。查看pthread_cond_wait()和相关函数。

票数 2
EN

Stack Overflow用户

发布于 2010-04-16 04:53:29

处理多线程的一种常见机制是主/从方法,其中一个线程将任务交给其他线程执行。这种风格的症结在于,即使在从属线程中,每个线程本质上也可以完全控制自己的执行。主线程并不真正“强迫”其他线程做任何事情,主线程可以发出请求,但从线程必须自愿接受()来自主线程的指令……hrm...所以也许主/从在这里用词不当...无论如何,从线程的常见解决方案是伪代码。

代码语言:javascript
复制
while (!should_exit):
    while (!have_something_to_do):
        wait_for_something_to_do()
    do_the_thing_i_was_waiting_for()

您可以使用如下所示的结构在C中很容易地实现此策略(出于示例的目的,我将求助于伪c-ish代码)

代码语言:javascript
复制
struct Slave {
    Mutex              thread_lock;
    ConditionVariable  thread_cv;
    int                exit_flag;
    void             (*thread_operation)();
};

void slave_thread( Slave * slave ) {
    while( !exit_flag )
    {
        lock( thread_lock );
        while( slave->thread_operation == NULL )
            slave->thread_cv.wait( thread_lock );
        unlock( thread_lock );
        (*slave->thread_operation)(); // do the master's bidding...
    }
}

void master_thread()
{
   Slave slave1;
   Slave slave2;

   slave1.thread_operation = NULL;
   slave2.thread_operation = NULL;

   // create the threads. They'll immediately block on the condition variable

   slave1.thread_operation = some_function_pointer;
   slave2.thread_operation = some_other_function_pointer;

   notify_one( slave1.thread_cv ) // Now that the function pointers are set, wake
   notify_one( slave2.thread_cv ) // the slave threads

}

当然,这是一个过于简单的例子,但希望它能给你一个大概的概念。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2648665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档