Я ищу подход, который позволил бы мне присвоить порядковые номера 0 .. (N-1) для N O / S потоков, чтобы потоки были в числовом порядке. То есть получаемый поток будет иметь более низкий идентификатор потока O / S, чем поток с порядковым номером 1.
Для этого потоки взаимодействуют через общее пространство памяти.
Модель упорядочения памяти такова, что запись будет атомарной (если два одновременно работающих потока записывают ячейку памяти одновременно, результат будет один или другой). Платформа не будет поддерживать атомарные операции сравнения и установки.
Я ищу алгоритм, который эффективен по количеству операций записи в разделяемую память и быстро завершится с использованием десятков тысяч потоков без каких-либо неприятных условий поступления потоков в худшем случае.
O / S назначит номера потоков в произвольном порядке на всем протяжении 32-битного пространства. Могут быть произвольные задержки создания потока - алгоритм может считаться завершенным, когда присутствуют все N потоков.
Я не могу использовать очевидное решение - собрать все потоки и затем отсортировать их одним потоком - без атомарной операции у меня нет способа безопасно собрать все отдельные потоки (другой поток может перезаписать слот).