0Pricing
C Academy · Pelajaran

Sinkronisasi dan Kondisi Balapan

Terapkan mutex dan semaphore untuk mengelola sumber daya bersama dengan aman.

Sinkronisasi dan Kondisi Balapan adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 3 pelajaran total.

Sinkronisasi dan Kondisi Balapan

Sinkronisasi dan Kondisi Balapan

Ketika beberapa utas mengakses sumber daya bersama, kondisi balapan dapat terjadi dan menyebabkan hasil yang tidak dapat diprediksi.

Dalam pelajaran ini, Anda akan mempelajari:

  • Apa itu kondisi balapan dan bagaimana kondisi tersebut terjadi.
  • Cara menggunakan mutex untuk mencegah kondisi balapan.
  • Cara semafor membantu mengelola sumber daya bersama.
Sinkronisasi dan Kondisi Balapan — ilustrasi 1

Apa Itu Kondisi Balapan?

Apa Itu Kondisi Balapan?

Kondisi balapan terjadi ketika beberapa utas mengakses data bersama secara bersamaan sehingga perilakunya tidak dapat diprediksi.

Contoh:

  • Dua utas mencoba memperbarui penghitung global.
  • Nilai akhirnya mungkin salah akibat saling mengganggu.

Contoh: Kondisi Balapan dalam Pemrosesan Multutas

Contoh: Kondisi Balapan dalam Pemrosesan Multutas

Program ini menunjukkan kondisi balapan ketika beberapa utas mengubah variabel bersama.

#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;
}

Mencegah Kondisi Balapan dengan Mutex

Mencegah Kondisi Balapan dengan Mutex

Mutex (eksklusi mutual) memastikan hanya satu utas yang mengakses sumber daya pada satu waktu.

Fungsi mutex:

  • pthread_mutex_init() - Menginisialisasi mutex.
  • pthread_mutex_lock() - Mengunci mutex.
  • pthread_mutex_unlock() - Membuka kunci mutex.
  • pthread_mutex_destroy() - Menghapus mutex.

Contoh: Menggunakan Mutex untuk Mencegah Kondisi Balapan

Contoh: Menggunakan Mutex untuk Mencegah Kondisi Balapan

Program ini memperbaiki kondisi balapan dengan menggunakan mutex untuk mengendalikan akses ke penghitung bersama.

#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;
}

Apa Itu Semafor?

Apa Itu Semafor?

Semafor adalah penghitung yang digunakan untuk mengendalikan akses ke sumber daya.

Fungsi utama:

  • sem_init() - Menginisialisasi semafor.
  • sem_wait() - Mengurangi nilai semafor.
  • sem_post() - Menambah nilai semafor.
  • sem_destroy() - Menghapus semafor.

Contoh: Menggunakan Semafor untuk Sinkronisasi

Contoh: Menggunakan Semafor untuk Sinkronisasi

Program ini menggunakan semafor untuk mengelola akses ke sumber daya bersama.

#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;
}

Praktik Terbaik untuk Sinkronisasi Utas

Praktik Terbaik untuk Sinkronisasi Utas

Untuk menghindari kondisi balapan:

  • Gunakan mutex untuk melindungi variabel bersama.
  • Gunakan semafor untuk mengelola sumber daya.
  • Minimalkan penggunaan sumber daya bersama jika memungkinkan.

Ringkasan

Ringkasan

Dalam pelajaran ini, Anda telah mempelajari:

  • Apa itu kondisi balapan dan bagaimana kondisi tersebut terjadi.
  • Cara menggunakan mutex untuk mencegah kondisi balapan.
  • Cara semafor membantu mengelola akses ke sumber daya bersama.

Dengan demikian, bagian Pemrosesan Multutas dan Konkruensi dalam C telah selesai!

Sinkronisasi dan Kondisi Balapan — ilustrasi 10

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Sinkronisasi dan Kondisi Balapan” gratis?

Ya — teks lengkap “Sinkronisasi dan Kondisi Balapan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Sinkronisasi dan Kondisi Balapan”?

Terapkan mutex dan semaphore untuk mengelola sumber daya bersama dengan aman. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C Academy?

Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.

Berapa lama pelajaran “Sinkronisasi dan Kondisi Balapan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?

Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pengenalan Thread
  2. Membuat dan Mengelola Thread
  3. Sinkronisasi dan Kondisi Balapan
← Kembali ke C Academy