C pthreads:从main开始一个线程

时间:2014-02-27 14:39:09

标签: c multithreading pthreads

我正在使用带有嵌入式Linux(C)的ARM处理器。我的主程序必须执行实时操作,并在一段时间后(由主程序确定)我必须通过蓝牙连接将数据发送到Android平板电脑。

我想将蓝牙数据传输外包给POSIX线程。在main函数中,我现在要触发Thread来执行数据发送。那么我怎么能'重启'一个线程,因为它应该只在主要功能必须通过蓝牙发送数据?这就是为什么它也没有帮助在Thread函数中有一个循环(与sleep函数结合),因为正如我已经说过的,时间由main函数决定,而不是Thread函数本身。

那么有没有重启线程的选项?或者,如果有人有更好的想法来解决这个问题,我愿意接受它。 :)

2 个答案:

答案 0 :(得分:5)

最简单的是使用同步例程。想到了信号量:

thread() {
    for (;;) {
        sem_wait(&semaphore);
        send_data(...);
    }
}

main() {
    get_data();
    pus_data_in_a_buffer();
    sem_post(&semaphore);
    // ...
}

但是,如果您只需异步发送数据,则可能需要查看异步IO库aio(7)

答案 1 :(得分:0)

您可以只进行线程循环,检查发送缓冲区是否已准备好发送,然后如果未准备就暂停。虽然不是每种情况都不理想,但你当然可以让线程保持循环并等待某些事情发生。

请注意,这对每种情况都不实用,但是因为您已经提到它是一个实时场景,这可能是保持峰值性能的最佳选择,因为信号量可能有些昂贵(就处理时间而言) )。如果您不需要这样的优化,那么使用信号量可能更安全。