EN JP CN

CONC.SLEEP

CONC.SLEEP

クリティカル セクションでのブロック関数の呼び出し

CONC.SLEEP チェッカーは、コードのクリティカルセクションでブロック関数のインスタンスを検出します。

脆弱性とリスク

そのブロック関数が実行されるまで、ロックは解放されません。このため、他のスレッドがブロックされる可能性があります。このような状況では、予期しない動作が発生する可能性があるため、ブロック関数の呼び出しを回避するのがベストです。

脆弱コード例

1  #include <pthread.h>
2  
3  void foo(pthread_mutex_t *mutex) {
4    pthread_mutex_lock(mutex);
5    sleep(30000);
6    pthread_mutex_unlock(mutex);
7  }

Klocwork 4 行目で mutex がロックされた後、ブロック関数 sleep が呼び出されていることを示す 5 行目にフラグを立てます。

関連チェッカー

拡張機能

このチェッカーは機能を拡張できます。関連するナレッジベースレコードには以下の種類があります。

詳細については、C/C++ 解析のチューニングを参照してください。