作者cole945 (躂躂..)
看板LinuxDev
标题Re: [问题] 请问pthread的问题
时间Mon Apr 27 15:01:04 2009
※ 引述《lackofblack (...)》之铭言:
: pthread_create(thrd, NULL, func, NULL);
: pthread_cancel(thrd);
: 以上每跑一阵子之後, pthread_create就会发生错误
: 请问是不是能create的thread数目有上限呢?
与其说 create thead 的数目有上限,
应该说, 你同时能 create thread 的数目有上限..
你这里虽然用了 pthread_cancel,
但 pthread 预设的 cancel 方式是 PTHREAD_CANCEL_DEFERRED ,
也就是说, 你的 thread 并不会在你呼叫 pthread_cancel() 就被 cancel掉,
而是到了 pthread 的 cancellation point 才会被终止, "且" 资源被释放
只有在这种其况下, thread 的资源才会被收回并用来建立其他的 thread
虽然用 PTHREAD_CANCEL_ASYNCHRONOUS 的方式可以 "立即" 终止该 thread,
可是用这种方式, thread 的资源回收可能无法被回收(看後端OS而异)...
而且较危险, 因为 thread 手边的工作若还没处理完, 可能会导致程式在不稳定的状态
建议你可以查查 pthread cancellation point 的文件
: 就算把thread cancel掉也没办法吗...
而依你的情形, 若你同时要建立的 thread 量很多,
或频繁地需要有 thread 来处理事情, 这应该就要用推文所说的方式,
用固定的 thread 数目(一般建议是CPU数目的两倍左右) 再配合一个 work queue,
不断去 work queue 中查询(poll)是否有新工作要做..
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.194.146