Computer >> Máy Tính >  >> Lập trình >> C ++

Cách sử dụng các Semaphores POSIX trong ngôn ngữ C

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$