Java, C #, VB: мы можем написать функции безопасности потока, не полагаясь на нативные реализации - PullRequest
2 голосов
/ 24 апреля 2011

Мне интересно, возможно ли когда-нибудь написать функции блокировки (для потоков) с самим языком (этот вопрос носит чисто академический характер, я знаю, что никто никогда не сделает это, даже если это возможно (не я))?

Перефразируя вопрос:

A) Можно ли в Java писать функции безопасности потоков только с помощью java, но без использования каких-либо предоставленных классов / языковых элементов / синтаксиса, которые предлагают эту функцию?

B) Можно ли в C # писать функции безопасности потоков только на C #, но без использования каких-либо предоставленных классов / языковых элементов / синтаксиса, которые предлагают эту функцию?

C) ВVb, возможно ли написать функции обеспечения безопасности потоков только с Vb, но без использования каких-либо предоставленных классов / языковых элементов / синтаксиса, которые предлагают эту функцию?

Ответы [ 3 ]

4 голосов
/ 24 апреля 2011

Если у вас есть атомарное чтение и запись, что, например, делает C # для целых чисел, вы можете использовать алгоритм Деккера для построения поточно-ориентированных алгоритмов без поддержки других примитивов:

2 голосов
/ 24 апреля 2011

Да, это возможно, все, что действительно нужно для формирования мьютекса, - это переменная общей памяти, которая записывается в одном машинном цикле чтения-изменения-записи. Однако это неэффективно, потому что все потоки в потенциальном конфликте должны быть заняты ожиданием. Основная задача более продвинутых конструкций в классах предотвращения конфликтов потоков в этих языках заключается в том, чтобы позволить потоку завершить выполнение до тех пор, пока другой поток не завершит работу с конфликтующим ресурсом, а затем сразу же вернуться в последовательность выполнения, когда ресурс освободится.

Я думаю, может быть, вы думаете о:

C# lock()
VB SyncLock
Java syncronized

Это элементы языка, а не библиотечные классы.

0 голосов
/ 24 апреля 2011

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

Семантика volatile в Java определена в Спецификация языка JavaРаздел 17, «Резьбы и замки»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...