Semaphore là một khái niệm về quá trình hoặc đồng bộ hóa luồng. Ở đây chúng ta sẽ xem cách sử dụng các semaphores trong các chương trình thực.
Trong hệ thống Linux, chúng ta có thể lấy thư viện semaphore POSIX. Để sử dụng nó, chúng ta phải đưa vào thư viện semaphores.h. Chúng tôi phải biên dịch mã bằng các tùy chọn sau.
gcc program_name.c –lpthread -lrt
Chúng ta có thể sử dụng sem_wait () để khóa hoặc đợi. Và sem_post () để giải phóng khóa. Semaphore khởi tạo sem_init () hoặc sem_open () cho Giao tiếp giữa các quá trình (IPC).
Ví dụ
#include <stdio.h> #include <pthread.h> #include <semaphore.h> #include <unistd.h> sem_t mutex; void* thread(void* arg) { //function which act like thread sem_wait(&mutex); //wait state printf("\nEntered into the Critical Section..\n"); sleep(3); //critical section printf("\nCompleted...\n"); //comming out from Critical section sem_post(&mutex); } main() { sem_init(&mutex, 0, 1); pthread_t th1,th2; pthread_create(&th1,NULL,thread,NULL); sleep(2); pthread_create(&th2,NULL,thread,NULL); //Join threads with the main thread pthread_join(th1,NULL); pthread_join(th2,NULL); sem_destroy(&mutex); }
Đầu ra
soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ gcc 1270.posix_semaphore.c -lpthread -lrt 1270.posix_semaphore.c:19:1: warning: return type defaults to ‘int’ [-Wimplicit-int] main() { ^~~~ soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ ./a.out Entered into the Critical Section.. Completed... Entered into the Critical Section.. Completed... soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$