POSIX Threadsを利用するマルチスレッド アプリケーションを開発しています。私は定期的なジョブを実行するためにスレッドを使用しており、その目的のためにusleep(3)を使用してスレッドの実行を一時停止しています。私の質問は、メイン スレッドから usleep() タイマーをキャンセルする方法です。試してみpthread_kill(thread, SIGALRM)ましたが、グローバルな影響があり、メイン アプリケーションが終了します (デフォルトで)。ここに私の疑似コードがあります:
void threaded_task(void *ptr) {
initialize();
while(running) {
do_the_work();
usleep(some_interval);
}
clean_up();
release_resources();
}
そして、メイン スレッドから指定されたスレッドを停止 (および正常にシャットダウン)するために使用される疑似関数を次に示します。
void stop_thread(pthread_t thread) {
set_running_state(thread, 0); // Actually I use mutex staff
// TODO: Cancel sleep timer so that I will not wait for nothing.
// Wait for task to finish possibly running work and clean up
pthread_join(thread, NULL);
}
私の目標を達成するための便利な方法は何ですか? 条件変数を使用する必要がありますか、それとも sleep() バリアントを使用してこれを行うことができますか?