【发布时间】:2015-07-09 10:44:11
【问题描述】:
我想让 Posix 线程在经过一定时间后完成其工作。您可以在简单的 C + Python 伪代码中看到我的解决方案。但我认为这不是一个有效和准确的解决方案。实现这一目标的最佳方法是什么?
Mutex incrementLock
BigInteger n = 0
int milliToWork = 5000
Worker()
int elapsedMilli = 0
while elapsedMilli < milliToWork
clock_t startClock = clock()
Lock(incrementLock)
n += 1
Unlock(incrementLock)
clock_t endClock = clock()
elapsedMilli += (double)(endClock - startClock) / (double)CLOCKS_PER_SEC * 1000.0
main()
int nThreads = 100
Thread threads[nThreads]
for i = 1 to nThreads
ThreadCreate(threads[i], Worker)
for i = 1 to nThreads
ThreadJoin(threads[i])
【问题讨论】:
-
这取决于“它的工作”是什么。如果要尽可能快地增加
n,那么您所拥有的就可以了。 -
@D.Shawley 好吧,我需要生成几个线程,让它们一起做一些计算,这必须在一定时间内完成,比如 30 秒。所以他们应该在例如 28 秒内尽力而为,最后 2 秒是一些清理工作。我的解决方案是否足够准确地测量时间来做到这一点?
-
是的。 IIRC,
CLOCKS_PER_SEC被 POSIX 要求为 1,000,000,所以它应该更准确。
标签: c multithreading pthreads