---
title: "排他的資源を使うタスクの実行時間とは？待ち時間をタイムチャートで求める【基本情報技術者試験】"
description: "複数CPUで並列実行するタスクが共通資源を排他的に使うときの実行時間を、CPU処理と資源待ちを分けたタイムチャートで整理し、FE試験で待ち時間を見落とさない判断手順を解説します。"
last_modified_at: "2026-08-11"
canonical_url: "https://stemtazoo.github.io/fe/exclusive-resource-task-timing/"
section: "fe"
---

## まず結論

複数のタスクが同時に動けるシステムでも、**共通の資源を排他的に使用する区間では、同時にその資源を使えません。**

基本情報技術者試験では、次の順番で考えると実行時間を求めやすくなります。

```text
1. CPUはいくつあるか確認する
2. 各タスクが共有資源を要求する時刻を求める
3. 共有資源を使う時間帯が重なるか確認する
4. 重なったら、後から来たタスクに待ち時間を加える
5. 最後に終了するタスクの時刻を答える
```

特に大切なのは、**CPUが空いていても、必要な共有資源が使用中ならタスクは先へ進めない**という点です。

## 直感的な説明

CPUを「作業する人」、共有資源を「1台しかない機械」と考えてみます。

作業者が2人いれば、別々の作業は同時にできます。

```text
作業者A → 作業中
作業者B → 作業中
```

しかし、途中で2人とも同じ1台の機械を使う必要があるとします。

```text
共有機械R
→ 1人ずつしか使えない
```

Aが先に使っている間にBが来ても、Bは待たなければなりません。

```text
CPUが2台
→ CPU処理は同時に進められる

共有資源Rが1つ
→ Rを使う処理は同時に進められない
```

この**待ち時間**が、全体の終了時刻を遅らせます。

## 定義・仕組み

### 排他的に使用するとは

「排他的」とは、ある資源を1つのタスクが使用している間、他のタスクが同じ資源を使用できないことです。

```text
タスクAが資源Rを使用中
↓
タスクBも資源Rを要求
↓
タスクBは待つ
```

このような制御は、複数の処理が同じ資源を同時に変更して矛盾した状態になることを防ぐために使われます。

### CPUの数と資源の数は分けて考える

ここが最も重要です。

CPUが2台あっても、共有資源Rが1つなら、Rを使う部分は並列にはできません。

```text
CPU1 ── タスクA
CPU2 ── タスクB

共有資源R ── 1タスクずつ
```

したがって、問題では次の2点を別々に確認します。

| 確認するもの | 見るポイント |
|---|---|
| CPU | 同時に何タスクがCPU処理できるか |
| 共有資源 | 同時に何タスクがその資源を使えるか |

### タイムチャートで考える

例として、次の2タスクを考えます。

```text
タスクA
CPU 20ms → 資源R 40ms → CPU 30ms

タスクB
CPU 30ms → 資源R 40ms → CPU 20ms
```

CPUが2台なら、最初のCPU処理は同時に開始できます。

```text
時間   0      20      30      60      70      90
       |-------|-------|-------|-------|-------|

A      CPU     [---- R ----]    CPU
B      CPU         待ち         [---- R ----] CPU
```

Aは20msで資源Rを要求し、20〜60msにRを使います。

Bは30msでRを要求しますが、60msまでAが使用中です。

したがって、Bには

```text
60 - 30 = 30ms
```

の待ち時間が発生します。

### 待ち時間を速く求める方法

タイムチャートを全部描かなくても、次の計算で求められることがあります。

```text
先のタスクが資源を使い終わる時刻
-
後のタスクが資源を要求する時刻
=
待ち時間
```

先ほどの例なら、

```text
60 - 30 = 30ms
```

です。

ただし、結果が0以下なら待ち時間はありません。

このテーマは、OSのタスク管理や排他制御と関係する内容です。公式の出題範囲は、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

## 科目Aでどう出る？

科目Aでは、複数のタスクについて

- CPU使用時間
- 入出力や共有資源の使用時間
- CPUの台数
- 共有資源が排他的かどうか

などが与えられ、全処理が終わるまでの時間を求める問題があります。

### 試験中の判断手順

まず、各タスク単独の処理時間を合計します。

```text
CPU時間
＋
資源使用時間
＋
CPU時間
```

次に、共有資源の取り合いがあるかを確認します。

```text
待ちがなければ
→ 単独処理時間のまま

資源使用が重なれば
→ 後のタスクに待ち時間を追加
```

特に問題文に次の表現があれば注意します。

```text
共通の資源
排他的に使用
同時に開始
CPUが複数台
```

「CPUが複数台だから全部並列」と考えず、**共有資源だけは別に確認する**のがポイントです。

### 最後に見るのは「両方が終わった時刻」

問題が「二つのタスクの処理が完了するまでの時間」を聞いている場合は、早く終わる方ではなく、**最後に終了するタスクの終了時刻**を答えます。

```text
A終了：120ms
B終了：140ms

全体終了
→ 140ms
```

## どんな場面で使う？

### 複数タスクの実行時間を求める問題

この考え方は、複数のタスクが並列に動く問題で使います。

特に、途中で共通資源を使う場合は、単純に各処理時間を足すだけでは正しい終了時刻を求められません。

### OSの排他制御を理解する前提

排他的な共有資源の考え方は、ミューテックスやセマフォなどの排他制御を理解する前提にもなります。

まずは、

```text
1つの資源を同時には使えない
→ 後から来た処理は待つ
```

という基本を押さえることが重要です。

### タスクスケジューリングとのつながり

CPUをどのタスクへ割り当てるかという考え方は、[タスクスケジューリング方式とは？](https://stemtazoo.github.io/fe/task-scheduling/)で整理しています。

今回のテーマでは、それに加えて

```text
CPUを使えるか
＋
必要な共有資源を使えるか
```

の両方を確認します。

## よくある誤解・混同

### CPUが2台なら、二つのタスクは最後まで同時に進める

違います。

CPU処理を同時に進められても、1つしかない共有資源を排他的に使う部分では待ち時間が発生します。

```text
CPUは空いている
でも
資源Rは使用中
↓
タスクは待つ
```

### 各タスクの処理時間を足せば全体時間になる

タスクが並列に動く場合、単純に全タスクの時間を足すわけではありません。

一方で、各タスク単独の時間だけを見て「両方同じ時間で終わる」とも限りません。

**共有資源による待ち時間を加味する**必要があります。

### 排他的とは、CPUを一つのタスクしか使えないという意味

排他的なのは、問題文で指定された資源です。

```text
CPUが2台
→ CPUは同時使用可能

資源Rは排他的
→ Rだけは1タスクずつ
```

何が排他的なのかを確認します。

### 待ち時間は資源使用時間と同じになる

必ずしも同じではありません。

後のタスクが資源を要求した時点で、先のタスクがどれだけ資源を使い終えているかによって待ち時間は変わります。

```text
先の資源使用終了時刻 - 後の要求時刻
→ 実際の待ち時間
```

## まとめ（試験直前用）

- CPUが複数台でも、排他的な共有資源は同時に使えない
- 共有資源を後から要求したタスクには待ち時間が発生することがある
- 「資源使用終了時刻 − 後の要求時刻」で待ち時間を求める
- 全体の終了時間は、最後に終了するタスクの時刻を見る
- 迷ったら「CPU」と「共有資源」を別々の時間軸で確認する
