标签:writeLock 操作系统 lock pthread 写者 unlock mutex 读者 accessReaderCnt
1.1 实验目的
1.2 代码
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define N_WRITER 5 // writer count
#define N_READER 9 // reader count
#define W_SLEEP 1 // writer sleep
#define R_SLEEP 1 // reader sleep
// pthread type wid array, rid array
pthread_t wid[N_WRITER], rid[N_READER];
// Only one person can write
pthread_mutex_t writeLock = PTHREAD_MUTEX_INITIALIZER;
// Only one person can access readerCnt in the same time.
pthread_mutex_t accessReaderCnt = PTHREAD_MUTEX_INITIALIZER;
int data = 0;
int readerCnt = 0;
void write()
{
int rd;
rd = rand() % 1000;
printf("write %d\n", rd);
data = rd;
}
void read()
{
printf("read %d\n", data);
}
void *writer()
{
while (1) {
// lock the writeLock
pthread_mutex_lock(&writeLock);
write();
// unlock the writeLock
pthread_mutex_unlock(&writeLock);
sleep(W_SLEEP);
}
pthread_exit((void *)0);
}
void *reader(void *in)
{
while (1) {
// lock the accessReaderCnt for increase
pthread_mutex_lock(&accessReaderCnt);
// increase reader count
readerCnt++;
if (readerCnt == 1) {
// lock the writeLock when the readerCnt equals one
pthread_mutex_lock(&writeLock);
}
// unlock the accessReaderCnt
pthread_mutex_unlock(&accessReaderCnt);
// output the data value
read();
// lock the accessReaderCnt
pthread_mutex_lock(&accessReaderCnt);
// decrease reader count
readerCnt--;
if (readerCnt == 0) {
// unlock the writeLock
pthread_mutex_unlock(&writeLock);
}
// unlock the accessReaderCnt
pthread_mutex_unlock(&accessReaderCnt);
sleep(R_SLEEP);
}
}
int main(void)
{
int i = 0;
// create N_READER pthread for reader
for (i = 0; i < N_READER; i++) {
pthread_create(&rid[i], NULL, reader, NULL);
}
// create N_WRITER pthread for writer
for (i = 0; i < N_WRITER; i++) {
pthread_create(&wid[i], NULL, writer, NULL);
}
// sleep the main thread
while (1) {
sleep(10);
}
return 0;
}
1.3 运行截图
标签:writeLock,操作系统,lock,pthread,写者,unlock,mutex,读者,accessReaderCnt 来源: https://www.cnblogs.com/amnotgcs/p/15556597.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。