スレッド (コンピュータ)
マルチスレッドのプログラミングは前述のように、シングルスレッド前提のプログラミングと比べて難易度が高い。マルチスレッドの動作は非決定論的であり、慎重にプログラミングしなければ、タイミングによって発生したりしなかったりする厄介な異常動作や不具合を引き起こすこともある。マルチスレッド環境におけるバグは、しばしば原因特定が困難となる。
一般的なアプリケーションプログラミングでは、スレッドを明示的に起動して利用することは少ない。代わりに、並列処理や並行処理のバックエンドとしてスレッドを暗黙的に利用する、上位レベルのAPIを利用することが多い。例としてOpenMPや、.NETのタスク並列ライブラリ(英語版) (TPL) などが挙げられる。Future パターンをサポートするプログラミング環境では、並行処理の実行にスレッドを利用するが、煩雑なスレッドの操作をほとんど意識することなく並行処理を効率的に記述することができる。また、これらはAPI呼び出しのたびにスレッドを起動/終了するのではなく、あらかじめいくつかのスレッドを起動しておいて再利用することのできるスレッドプールを内部で使用していることが多い。上位レベルのAPIを利用することで、オーバーヘッドを低減し、また実行環境のハードウェア構成を意識することなく、環境に適した数のスレッドを活用することが可能となる。しかし、スレッドを暗黙利用する場合でも、共有資源に複数のスレッドから同時アクセスする場合の排他制御などに関しては、依然として配慮が必要であることが多い。