【发布时间】:2011-01-02 09:20:12
【问题描述】:
我有一个图像生成器,它将受益于在线程中运行。我打算使用 POSIX 线程,并基于https://computing.llnl.gov/tutorials/pthreads/#ConVarSignal 编写了一些模拟代码来测试。
在预期的程序中,当使用GUI时,我希望生成的线条从上到下一一出现(图像生成可能很慢)。
还需要注意的是,线程中生成的数据并不是实际的图像数据。线程数据被读取并转换为 RGB 数据并放入实际的图像缓冲区中。在 GUI 中,可以在图像生成期间更改线程生成的数据转换为 RGB 数据的方式,而无需停止图像生成。
但是,线程调度程序不能保证线程将按照我想要的顺序运行,不幸的是,这使得线程生成的数据的转换变得更加棘手,这意味着保持数组保存 bool 值的不良解决方案指出哪些行已完成。
我该如何处理?
目前我有一个观察者线程来报告图像何时完成(这确实应该是一个进度条,但我还没有那么远,它改为使用pthread_cond_wait)。还有几个渲染线程在做while(next_line());
next_line() 执行互斥锁,并获取 img_next_line 的值,然后将其递增并解锁互斥锁。然后它渲染该行并执行互斥锁(与第一个不同)以获取lines_done 检查高度,如果完成则发出信号,解锁并在完成时返回0,否则返回1。
【问题讨论】:
-
只是想我最好提一下,上面的观察者线程、渲染线程和 next_line 函数的实现在没有 GUI 的情况下工作复杂的事情。
标签: c linux image-processing posix pthreads