Tugas Embeded System
Tugas Embeded System
OLEH
TRY SUSANTO
(15/388505/PPA/04944)
1 if (size == 0) {
2 pthread_cond_wait(&sent, &mutex);
3}
then this code would only work if two conditions are satisfied:
pthread_cond_wait returns only if there is a matching call to
pthread_cond_signal, and
there is only one consumer thread.
Explain why the second condition is required.
Jawab :
Karena kondisi pertama, maka setelah baris 2, itu harus benar size !=0. Tapi kondisi
ini tidak selalu benar jika ada dua atau lebih thread. Ingat bahwa pthread_cond_wait
mengunci sementara pada mutex, sehingga bisa dimungkinkan untuk baris 1 di atas
untuk kembali benar di thread A, yang kemudian akan memblokir jalur 2, pada saat
jalur 2 diblokir sementara, thread B akan menerima pesan yang dikirim berikutnya
tanpa mengeksekusi pthread_cond_wait. Hal ini bisa terjadi jika B mengeksekusi
baris 1 setelah memasukkan satu pesan ke dalam antrian, tapi sebelum jadwal A
merespon sinyal. Ketika A merespon sinyal, maka pada baris 2 akan melanjutkan
menerima pesan dengan syarat tidak ada pesan pada antrian.