基於互斥鎖同步機制的Linux共享記憶體簡單例項

2021-07-09 07:21:42 字數 1688 閱讀 5195

linux共享記憶體是linux系統中程序間通訊的一種方式,但是沒有相應的同步機制,本文通過程序間的互斥鎖實現一種簡單的共享記憶體例項,僅供入門學習。

sm_common.h:
#ifndef __sm_common_h__

#define __sm_common_h__

#include #define sm_buf_size 1024

#define sm_id 0x1122

struct sm_msg

;#endif

sm_server.c:

#include #include #include #include #include

#include "sm_common.h"

int main(void)

#if 1

shared_memory = shmat(shm_id, null, 0);

if (shared_memory == null)

msg = (struct sm_msg *)shared_memory;

msg->flag = 0;

pthread_mutex_init(&msg->sm_mutex, &attr);

while (running)

} else

} ret = shmdt(shared_memory);

if (ret < 0)

if(shmctl(shm_id, ipc_rmid, 0) < 0)

#endif

return 0;

}

sm_client.c:

#include #include #include #include #include #include "sm_common.h"

int main(void)

shared_memory = shmat(shm_id, null, 0);

if (shared_memory == null)

msg = (struct sm_msg *)shared_memory;

char buf[32];

while (running) else

pthread_mutex_unlock(&msg->sm_mutex);

} }ret = shmdt(shared_memory);

if (ret < 0)

#if 0 //do thsi in server.

if(shmctl(shm_id, ipc_rmid, 0) < 0)

#endif

return 0;

}

makefile:

all:

gcc -o sm_server sm_server.c -lpthread

gcc -o sm_client sm_client.c -lpthread

使用方法:

1. 開啟終端1,執行服務端:./sm_server

2.開啟終端2,執行客戶端:./sm_client

3.在終端2輸入字串,在終端1可看到相應輸出

同步機制 互斥鎖

互斥鎖指代相互排斥,它是最基本的同步形式。互斥鎖用於保護臨界區,以保證任何時刻只有乙個執行緒在執行其中的 或者任何乙個時刻只有乙個程序在執行其中的 保護乙個臨界區的 的通常輪廓大體如下 lock the mutex 臨界區unlock the mutex posix互斥鎖被宣告為具有pthread ...

執行緒間同步機制 互斥鎖

互斥以排他方式防止共享資料被併發修改。互斥量從本質來說是一把鎖,是乙個二元變數,其狀態為開鎖 允許0 和上鎖 禁止1 在訪問共享資源前對互斥量進行設定 加鎖 在訪問完成後釋放 解鎖 互斥量。1 在訪問該資源前,首先申請該互斥鎖,如果該互斥鎖處於開鎖狀態,則申請到該鎖物件,並立即占有該鎖 使該鎖處於鎖...

Linux 同步機制 讀寫鎖

讀寫鎖也叫 shared exclusive 鎖,也是一種同步機制。讀寫鎖有三種狀態 讀模式下加鎖,寫模式下加鎖,不加鎖。有如下的使用約定 讀模式共享,寫模式獨佔,適合讀頻率遠大於寫頻率的場景。這些api位於 pthread.h 下。initialize read write lock rwlock...