Синхронизиране на нишки

Когато се изпълняват множество нишки, те неизменно ще взаимодействат една с друга, за да останат в синхрон. Има няколко инструмента за синхронизиране на нишки. Това:

  • блокове за взаимно изключване (Mutex);
  • променливи на състоянието;
  • семафори.
Обектите за синхронизация са променливи и могат да бъдат достъпни като данни. Нишките в различни процеси могат да комуникират помежду си чрез обекти за синхронизация, поставени в споделена памет на нишки, дори когато нишките в различни процеси обикновено са невидими една за друга.

Обектите за синхронизация могат да бъдат поставени във файлове, където ще бъдат разположени независимо от процеса, който ги е създал.

Основните ситуации, които изискват използването на синхронизация са:

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