C Academy · Ders

Eşzamanlama ve yarış koşulları

Paylaşılan kaynakları güvenli bir şekilde yönetmek için muteksleri ve semaforları uygulayın

3. ders / 310 adım

Eşzamanlama ve yarış koşulları, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 3 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 3 dersten oluşur.

Eşzamanlama ve Yarış Koşulları

Birden fazla iş parçacığı paylaşılan kaynaklara eriştiğinde yarış koşulları oluşabilir ve bu da öngörülemeyen sonuçlara yol açabilir.

Bu derste şunları öğreneceksiniz:

  • Yarış koşullarının ne olduğunu ve nasıl oluştuğunu.
  • Yarış koşullarını önlemek için karşılıklı dışlamaların nasıl kullanılacağını.
  • Semaforların paylaşılan kaynakları yönetmeye nasıl yardımcı olduğunu.
Eşzamanlama ve yarış koşulları — resim 1

Yarış Koşulu Nedir?

Birden fazla iş parçacığı paylaşılan verilere aynı anda eriştiğinde yarış koşulu oluşur ve bu durum öngörülemeyen davranışlara yol açar.

Örnek:

  • İki iş parçacığı genel bir sayacı güncellemeye çalışır.
  • Son değer, oluşan etkileşim nedeniyle yanlış olabilir.

Örnek: Çoklu İş Parçacığında Yarış Koşulu

Bu program, birden fazla iş parçacığının paylaşılan bir değişkeni değiştirdiği yarış koşulunu gösterir.

#include <stdio.h>
#include <pthread.h>

int counter = 0;

void *incrementCounter(void *arg) {
    for (int i = 0; i < 1000000; i++) {
        counter++;
    }
    return NULL;
}

int main() {
    pthread_t t1, t2;
    pthread_create(&t1, NULL, incrementCounter, NULL);
    pthread_create(&t2, NULL, incrementCounter, NULL);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    printf("Final counter value: %d\n", counter);
    return 0;
}

Karşılıklı Dışlama ile Yarış Koşullarını Önleme

Karşılıklı dışlama, bir kaynağa aynı anda yalnızca bir iş parçacığının erişmesini sağlar.

Karşılıklı dışlama işlevleri:

  • pthread_mutex_init() - Bir karşılıklı dışlamayı başlatır.
  • pthread_mutex_lock() - Karşılıklı dışlamayı kilitler.
  • pthread_mutex_unlock() - Karşılıklı dışlamanın kilidini açar.
  • pthread_mutex_destroy() - Karşılıklı dışlamayı yok eder.

Örnek: Yarış Koşullarını Önlemek İçin Karşılıklı Dışlama Kullanma

Bu program, paylaşılan sayaca erişimi denetlemek için karşılıklı dışlama kullanarak yarış koşulunu giderir.

#include <stdio.h>
#include <pthread.h>

int counter = 0;
pthread_mutex_t lock;

void *incrementCounter(void *arg) {
    for (int i = 0; i < 1000000; i++) {
        pthread_mutex_lock(&lock);
        counter++;
        pthread_mutex_unlock(&lock);
    }
    return NULL;
}

int main() {
    pthread_t t1, t2;
    pthread_mutex_init(&lock, NULL);
    pthread_create(&t1, NULL, incrementCounter, NULL);
    pthread_create(&t2, NULL, incrementCounter, NULL);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    pthread_mutex_destroy(&lock);
    printf("Final counter value: %d\n", counter);
    return 0;
}

Semafor Nedir?

Semafor, kaynaklara erişimi denetlemek için kullanılan bir sayaçtır.

Temel işlevler:

  • sem_init() - Bir semaforu başlatır.
  • sem_wait() - Semafor değerini azaltır.
  • sem_post() - Semafor değerini artırır.
  • sem_destroy() - Semaforu yok eder.

Örnek: Eşzamanlama İçin Semafor Kullanma

Bu program, paylaşılan bir kaynağa erişimi yönetmek için semafor kullanır.

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>

sem_t sem;

void *task(void *arg) {
    sem_wait(&sem);
    printf("Thread %d is executing\n", *(int *)arg);
    sem_post(&sem);
    return NULL;
}

int main() {
    pthread_t t1, t2;
    int id1 = 1, id2 = 2;
    sem_init(&sem, 0, 1);
    pthread_create(&t1, NULL, task, &id1);
    pthread_create(&t2, NULL, task, &id2);
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    sem_destroy(&sem);
    return 0;
}

İş Parçacığı Eşzamanlaması İçin En İyi Uygulamalar

Yarış koşullarını önlemek için:

  • Paylaşılan değişkenleri korumak için karşılıklı dışlamalar kullanın.
  • Kaynak yönetimi için semaforlar kullanın.
  • Mümkün olduğunda paylaşılan kaynak kullanımını en aza indirin.

Özet

Bu derste şunları öğrendiniz:

  • Yarış koşullarının ne olduğunu ve nasıl oluştuğunu.
  • Yarış koşullarını önlemek için karşılıklı dışlamaların nasıl kullanılacağını.
  • Semaforların paylaşılan kaynaklara erişimi yönetmeye nasıl yardımcı olduğunu.

Bu dersle C'de Çoklu İş Parçacığı ve Eşzamanlılık bölümü sona eriyor!

Eşzamanlama ve yarış koşulları — resim 10
Başlamak ücretsiz

Yapay zeka eğitmeniyle C öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
39
Dersler
144

Sıkça Sorulan Sorular

“Eşzamanlama ve yarış koşulları” dersi ücretsiz mi?

Evet — “Eşzamanlama ve yarış koşulları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 3 dersten oluşur.

“Eşzamanlama ve yarış koşulları” dersinde ne öğreneceğim?

Paylaşılan kaynakları güvenli bir şekilde yönetmek için muteksleri ve semaforları uygulayın C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 3. dersidir.

“Eşzamanlama ve yarış koşulları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İş parçacıklarına giriş
  2. İş parçacıkları oluşturma ve yönetme
  3. Eşzamanlama ve yarış koşulları
← C Academy Sayfasına Dön