Sobes.tech
Junior — Middle
87

Әртүрлі бағдарламалау тілдерінде семафорлар немесе олардың баламалары арқылы ағындар арасындағы синхрондауды қалай жүзеге асырдыңыз?

AI-дан жауап

sobes.tech AI

Семафорлар ортақ ресурстарға қол жеткізуді басқару үшін пайдаланылады, олар бірнеше ағын бір уақытта орындалуы мүмкін белгілі бір код учаскесін шектейді.

Python-да бұл үшін threading модулінен Semaphore класы бар:

import threading

# Максималды рұқсат саны 2 болатын семафор құру
sem = threading.Semaphore(2)

def worker(num):
    print(f"Ағын {num} семафорды күтуде")
    with sem:  # Семaфорды алу
        print(f"Ағын {num} критикалық бөлімге кірді")
        # Мұнда ортақ ресурспен жұмыс орындалады
        import time
        time.sleep(1)
    print(f"Ағын {num} критикалық бөлімнен шықты")

threads = []
for i in range(5):
    t = threading.Thread(target=worker, args=(i,))
    threads.append(t)
    t.start()

for t in threads:
    t.join()

Басқа тілдерде, мысалы Java-да, java.util.concurrent пакетінен Semaphore класы бар, ол ұқсас принциппен жұмыс істейді.

Осылайша, семафорлар бірнеше ағынның бір уақытта жұмыс істеуін бақылауға мүмкіндік береді, жарыс жағдайларын болдырмайды және дұрыс синхрондауды қамтамасыз етеді.