LINUX.ORG.RU

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

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

Мне нужно добавлять один и тот же. И от этого имеется защита в коде функций добавления. В реальном коде получается что-то типа очереди (поток сделал полезное дело, добавил свой item в начало списка, а другой поток после удаления элемента с конца списка будет соответствующий ему поток). То есть в принципе даже конкурентного добавления одного и того же элемента происходить не должно, только конкурентное добавление разных или добавление и удаление. Но я представил более жёсткий тест.

Если вас беспокоит, что я добавляю локальную переменную потока, то чуть выше я написал пример, где item'ы являются глобальными переменными. Результат тот же.

В любом случае mutex должен защищать от проблем, потому что в однопоточном режиме добавление одного и того же элемента работает верно (второе добавление игнорируется, а функция добавления возвращает false). А раз не защищает - я что-то не понимаю в многопоточном программировании и могу допустить другие ошибки, если не пойму как исправить этот пример.

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

Мне нужно добавлять один и тот же. И от этого имеется защита в коде функций добавления. В реальном коде получается что-то типа очереди (поток сделал полезное дело, добавил свой item в начало списка, а другой поток после удаления элемента с конца списка будет соответствующий ему поток). То есть в принципе даже конкурентного добавления одного и того же элемента происходить не должно, только конкурентное добавление разных или добавление и удаление. Но я представил более жёсткий тест.

В любом случае mutex должен защищать от проблем, потому что в однопоточном режиме добавление одного и того же элемента работает верно (второе добавление игнорируется, а функция добавления возвращает false). А раз не защищает - я что-то не понимаю в многопоточном программировании и могу допустить другие ошибки, если не пойму как исправить этот пример.