tag:blogger.com,1999:blog-410416665291724878.post6952195307042591569..comments2022-12-19T13:52:22.907+04:00Comments on >рабочие заметки: Puzzler из concurrency-interestRuslan Chereminhttp://www.blogger.com/profile/01023948540752159657noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-410416665291724878.post-40161635550842920952014-11-19T00:35:24.036+04:002014-11-19T00:35:24.036+04:00>Можно подробнее где требуется чтобы tryLock бы...>Можно подробнее где требуется чтобы tryLock было обязано иметь семантику acquire? <br /><br />неудачный tryLock() не обязан иметь никакой memory semantics, это явно описано в Lock. Удачный имеет ту же семантику, что и lock(), очевидно.<br /><br />>от простой пример реализации ReentrantLock, который, очевидно, будет приводить к data race на tryLock, но тем не менее, будет удовлетворять Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-78451003158948393912014-11-10T18:45:46.718+04:002014-11-10T18:45:46.718+04:00>В соответствии со спецификацией, lock()/tryLoc...>В соответствии со спецификацией, lock()/tryLock() имеют (==обязаны иметь) только семантику acquire<br /><br />Можно подробнее где требуется чтобы tryLock было обязано иметь семантику acquire? В JLS про это не говорится. В javadoc про это тоже не говорится.<br /><br />>>Но это особенности именно аппаратной модели памяти конкретного процессора<br />Правильнее говорить "это Vladimir Sitnikovhttps://www.blogger.com/profile/08686546253242083320noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-19107217940377818412011-12-11T22:27:47.579+04:002011-12-11T22:27:47.579+04:00Ну, собственно, Azul-ы -- главный известный мне пр...Ну, собственно, Azul-ы -- главный известный мне пример. Клифф Клик об этом их свойстве часто упоминает в контексте своей реализации ConcurrentMap.<br /><br />Я не видел JDK для Azul-ов. Сильно сомневаюсь, что они переписывали стандартные классы под себя -- уж больно это чревато непредвиденными последствиями для переносимости. Более того, на текущий момент нет возможности реализовать Lock Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-7662558584648224872011-12-11T22:19:08.527+04:002011-12-11T22:19:08.527+04:00т.е ключевой момент:
есть платформы, где CAS вообщ...т.е ключевой момент:<br /><b><i>есть платформы, где CAS вообще не связан с барьером</i></b><br /><br />(буду признателен за ссылки на тему).<br /><br />И второй момент - правильно ли, что текущие lock'и (н-р RL) работают CAS+acquite fence (я говорю не о x86 и подобных, а о azul в частности) ?Vladimir Dolzhenkohttps://www.blogger.com/profile/09353866985268525403noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-43899084248786283512011-12-11T22:11:54.298+04:002011-12-11T22:11:54.298+04:00Да нет, корень проблемы -- если я правильно понял ...Да нет, корень проблемы -- если я правильно понял вопрос -- в том, что есть платформы, где CAS вообще не связан с барьером. И барьеры -- если они нужны -- приходится добавлять к CAS явно. И тогда можно реализовать захват блокировки как CAS+acquire fence. Такая реализация блокировки будет соответствовать контракту, но описанный код будет работать не так, как наивно ожидалось.Ruslan Chereminhttps://www.blogger.com/profile/01023948540752159657noreply@blogger.comtag:blogger.com,1999:blog-410416665291724878.post-45141002355310951362011-12-11T22:07:38.636+04:002011-12-11T22:07:38.636+04:00я правильно понимаю, что корень проблемы это CAS, ...я правильно понимаю, что корень проблемы это CAS, который может завершиться отрицательно (т.е не смог захватить lock), что на некоторых платформах не пробивает барьер памяти ?<br />но при этом успешны CAS - пробивает, или таки тоже нет?Vladimir Dolzhenkohttps://www.blogger.com/profile/09353866985268525403noreply@blogger.com