Jak chronić zasoby, które mogą być używane w środowisku wielowątkowym lub asynchronicznym?

Pracuję nad API C # używanym przez różnych konsumentów. Ten interfejs API zapewnia dostęp do współdzielonego zasobu (w moim przypadku sprzęt, który wykonuje komunikację szeregową), który często ma kilku różnych aktorów próbujących używać go jednocześnie.

Mam problem z tym, że niektórzy moi konsumenci będą chcieli użyć tego w środowisku wielowątkowym - każdy aktor działa niezależnie i próbuje użyć tego zasobu. Prosty zamek działa tutaj dobrze. Ale niektórzy moi konsumenci wolą korzystać z asynchronicznego oczekiwania i czasowego przecinania zasobów. (Jak rozumiem) wymaga to blokady asynchronicznej w celu przywrócenia czasu do innych zadań; zablokowanie blokady zablokowałoby cały wątek.

I wyobrażam sobie, że posiadanie seryjnych blokad jest w najlepszym razie nieskuteczne, a potencjalny stan wyścigu lub impas w najgorszym przypadku.

Jak więc chronić ten wspólny zasób we wspólnej bazie kodu dla obu potencjalnych zastosowań współbieżności?

questionAnswers(1)

yourAnswerToTheQuestion