тут гонка на чтении
count
как хочет, потому что другие потоки к нему не обращаются. Более того, если поток освободит мьютекс, а потом захочет захватить его обратно будучи на том же процессоре, он гарантированно увидит, что он не является владельцем. Вот чтобы гарантировать, что он увидит, что он не является владельцем будучи на другом процессоре нужен барьер чтения перед этой проверкой. Ну и аналогично, когда вледелец мьютекса только что захвативший его на одном CPU мигрирует на другой CPU и захватывает его повторно тот же самый барьер гарантирует, что условие проверки владения сработает правильно.Нужен барьер или атомарные операции.
Отсюда и появление ошибки.
sed -e "s/[,']//g"
, но ты заэкранировал двойные. sed -e s/[,\']//g
И да, context switch — это достаточно тяжелая операция…Первое, что приходит в голову — излишнее число прерываний от сетевой карты.
откуда берется этот "потолок"
что мешает ему подрасти еще немножко :)
DigiKeyboard.sendKeyStroke(KEY_N, MOD_CONTROL_LEFT|MOD_SHIFT_LEFT);
Я смотрел дефайны этих портов, там просто хекс-значение, без какого либо каста к volatile ссылке, видимо это делается непосредственно компилятором
-dM
то можно увидеть как определен PORTB:#define PORTB _SFR_IO8(0x05)
…
#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
…
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))