Если у вас есть канал c
, который вы инициализируете с 1 элементом в нем, то вы можете «проверить» «мьютекс», удалив значение из канала (<-c
). Вы можете «освободить» его, добавив значение обратно (c <- 1
).
Так как оператор извлечения из канала a) является атомарным, и b) блокирует, пока есть что извлечь, он работает как мьютекс, так как если один поток выполнения уже извлечет его, в нем ничего не будет канал, и, таким образом, он будет блокироваться до тех пор, пока извлеченный им поток не вернет значение в канал для извлечения другим потоком.