【问题标题】:Synchronizing threads: Achieving a order同步线程:实现订单
【发布时间】:2013-10-24 00:36:25
【问题描述】:

我有 3 个线程。所有人都具有同等的优先权。每个人都必须打印“我是线程 i”,其中 i 对应于线程编号。我如何以这样的方式同步它们,输出应该是 我是线程 1 我是线程 2 我是线程 3

如果每个线程的优先级不同,这很容易实现,但如果我想保持相同的优先级,我该如何实现呢?

我可以使用任何操作系统原语或任何 POSIX 机制来实现这一点吗?

【问题讨论】:

  • 首先引入线程,然后序列化它们的执行——这样做的目的是什么?无论如何,根据您的平台,您将拥有几个可用于此目的的同步原语。例如。您可以为每个最初未发出信号的线程手动重置事件,并且每个线程都会阻塞,直到发出信号为止。然后向第一个发出信号以唤醒线程 1。然后在完成时发出信号事件 2 以唤醒线程 2,依此类推。
  • '如果每个线程的优先级不同,这将很容易实现' - 不,不会。

标签: multithreading synchronization pthreads posix semaphore


【解决方案1】:

我认为从学术/学习的角度来看,以您想要的特定顺序执行线程更多,否则它违背了多线程编程的目的。

实现它的方法之一是使用 pthread 库提供的条件变量。

pthread_cond_wait() 将导致调用线程阻塞某个变量值,一旦达到某个值,可以使用pthread_cond_signal()“唤醒”这个阻塞线程

有关显示使用 pthread 条件变量的描述和代码的简单示例,请参见 this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多