LINUX.ORG.RU

История изменений

Исправление AndreyKl, (текущая версия) :

я задачу понял так:

есть N мьютексов (пусть три, назовём 1,2,3). И есть заданный порядок их переключений. Например, лочить их можно только в порядке 1, 2, 3. А анлочить в порядке 2, 3, 1. К примеру.

Нужно чтобы при любом нарушении порядка лока/анлока выдавалась ошибка на этапе компиляции. Т.е. например, при попытке залочить мьютекс 2 в случае если мьютекс 1 не залочен. Или при попытке разлочить мьютекс 1 если все мьютексы залочены. Так же было бы логично на мой взгляд чтобы ошибка выдавалась при попытке залочить залоченный мьютекс, а так же при попытке разлочить разлоченный.

Твой код по моему не совсем то, хотя может быть я просто не понял (давно хаскель может не видел). Но мысль кажется да, такая, должно работать.

Исходная версия AndreyKl, :

я задачу понял так:

есть N мьютексов (пусть три, назовём 1,2,3). И есть заданный порядок их переключений. Например, лочить их можно только в порядке 1, 2, 3. А анлочить в порядке 2, 3, 1. К примеру.

Нужно чтобы при любом нарушении порядка лока/анлока выдавалась ошибка на этапе компиляции. Т.е. например, при попытке залочить мьютекс 2 в случае если мьютекс 1 не залочен. Или при попытке разлочить мьютекс 1 если все залочены. Так же было бы логично на мой взгляд чтобы ошибка должна выдавалась при попытке повторно залочить залоченный мьютекс, при попытке разлочить разлоченный.

Твой код по моему не совсем то, хотя может быть я просто не понял (давно хаскель может не видел). Но мысль кажется да, такая, должно работать.