ПредишенСледващото

Просто навсякъде е писано по различни начини. И аз не мога да разбера, че в действителност се отнася до всеки един от тези понятия. Например, една и съща Eckel има такива линии за него:

За решаване на проблема на съперничество потоци почти всички мултитрединга достъп схема синхронизиране на споделени ресурси. Това означава, че достъп до споделени ресурси в даден момент може да получи само една нишка. Най-често това се прави чрез поставяне на част от код в секцията за заключване, така че по едно и също време, прохода на тази част от кода може да бъде само една нишка. Тъй като това води до блокиране на предложението за взаимно изключване, този механизъм често е наричан като мутекс (взаимно изключване).

Java има вградена поддръжка за предотвратяване на конфликти във формата на ключова дума синхронизирани. Когато една нишка желае да изпълнява част от код, защитен от синхронизирани дума, той проверява дали семафор е на разположение, достъп до семафора, изпълнява кода и освобождава семафора.

Самият аз прочетох в една статия (и все още държат на това разбиране), че мутекс - това е обект, който се свързва с всеки обект в Java, а това може да отнеме две състояния: зает и безплатно. А що се отнася монитора в същата статия, че е писано, че е специален механизъм (в действителност - част от код), който, с помощта на мутекс урежда достъпа на конци до известна блок от код (тоест, той е отговорен за залавянето на конци ресурси и позволява само един от конец (което улавя мутекс), за да отидете на това, защитен екран, блок код, съответно, други теми следи, не позволява да се вземе този ресурс и тази на блок от код, а когато нишката излиза от блока на код, мониторът освобождава мутекс и позволява на други теми, за да влезете в този блок на код). Това е най-правилното разбиране?

И какво точно представляват тези понятия в Java?

Като цяло, може да се предположи, че мутекс е специален случай на семафор. Semaphore работи е проста - това е един вид семе - брояч. Всеки път, когато поток, който "улавя" семафор, броят намалява по един. Ако тя е нула или по-малко от нула - семафор е заключена (това е грубо казано, кодът спира да работи в момента на заснемането семафор). Всеки път, когато се освобождава семафор - този брояч се увеличава. И ако след това той ще бъде по-голяма от нула, а след това всяка произволна поток, който "виси на залавянето на семафора" ще изпрати сигнал да се събудя и ще бъде в състояние да продължи работата (разбира се, отново се намалява стойността на брояча).

Най-очевидният пример на семафора - мениджър изтегляне - добавяне на много файлове за изтегляне, но да ограничи броя на едновременни раси.

че мутекс - това е обект, който се свързва с всеки обект в Java, а това може да отнеме две състояния: зает и безплатно.

това е почти близо до истината. Да, в Java от класа на обекта е вид поле на мутекс. И всички наследници (т.е. всички други класове) също получават лично мутекс. ако методът е да маркирате думата синхронизирани, а след това просто се увива предизвикателство му по този мутекс. Това означава, че ако причината синхронизирани методи в един и същ обект от различни потоци - мутекс няма да им позволява да извършват паралелно. Но за различни предмети (дори от същия тип), че вече не е на работа.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!