Założmy, że mam stronę internetową. Po rejestracji każdy użytkownik ma dostać maila powitalnego. Chciałbym, by wysyłka tych maili była niezależna od backendu, dlatego utworzyłem aplikację, która cały czas odpytuje o bazę w poszukiwaniu nowych użytkowników i do nich wysyła maile.
Chciałbym to zrównoleglić. No i pojawia się problem wyścigu, by np. 2 wątki nie wysłały maila do tej samej osoby. Mógłbym wprowadzić coś w stylu blokady systemowej (np. poprzez Mutex
) by na raz tylko 1 wątek pobierał dane z bazy, a potem je oznaczał jako "wzięte", ale średnio mi się podoba takie rozwiązanie.
Innym rozwiązaniem byłoby wprowadzenie czegoś takiego, by każdy wątek w selekcie miał dodatkowe WHERE id%{{LICZBA_WATKOW}} = {{INDEX_WATKU}}
dzięki czemu przy np. 2 wątkach jeden z nich pobiera wiersze tylko parzyste, a drugi tylko nieparzyste.
Wiem że jest coś takiego jak kolejki, ale w obecnym rozwiązaniu chciałbym póki co ich uniknąć. Jakieś pomysły?