Дискретные блокировки против битов блокировки в слове общей блокировки - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть ситуация, когда было бы полезно иметь возможность атомарно получить более одной блокировки (возможно, все сразу) из набора из 32 блокировок, и потенциально мог бы заменить дискретные блокировки на 32 бита общей атомарной блокировки. слово, управляемое с помощью атомных схем, получая возможность блокировать более одного за раз без сложного, подверженного ошибкам и дорогостоящего протокола порядка блокировки. (Linux FUTEX_WAIT_BITSET и FUTEX_WAKE_BITSET также очень полезны.)

Имеет ли это смысл, и есть ли подводные камни в производительности, о которых мне следует беспокоиться? Концептуально, я думаю, что слово разделяемой блокировки должно иметь гораздо более высокие затраты на синхронизацию, поскольку атомы в нем должны синхронизировать память с изменениями, вносимыми другими потоками при любой из блокировок, а не только с конкретными принимаемыми блокировками (битами). Но также вероятно, что это чисто теоретическое различие, если только дискретные блокировки не имеют реальной, полной семантики получения / выпуска; если они просто реализованы с обычными барьерами, которые не связывают синхронизацию памяти с конкретным адресом блокировки, затраты на синхронизацию должны быть одинаковыми в любом случае.

Является ли этот анализ правильным? Есть ли другие причины, по которым мне следует проявлять осторожность при размещении нескольких битов блокировки в одном атомарном слове?

...