📄 test1.c
字号:
#include "unpipc.h"#include "pthread_rwlock.h"#define MAXNTHREADS 100void *reader(void *), *writer(void *);int nloop = 1000, nreaders = 6, nwriters = 4;struct { pthread_rwlock_t rwlock; pthread_mutex_t rcountlock; int nreaders; int nwriters;} shared = { PTHREAD_RWLOCK_INITIALIZER, PTHREAD_MUTEX_INITIALIZER };intmain(int argc, char **argv){ int c, i; pthread_t tid_readers[MAXNTHREADS], tid_writers[MAXNTHREADS]; while ( (c = Getopt(argc, argv, "n:r:w:")) != -1) { switch (c) { case 'n': nloop = atoi(optarg); break; case 'r': nreaders = atoi(optarg); break; case 'w': nwriters = atoi(optarg); break; } } if (optind != argc) err_quit("usage: test1 [-n #loops ] [ -r #readers ] [ -w #writers ]"); /* 4create all the reader and writer threads */ Set_concurrency(nreaders + nwriters); for (i = 0; i < nreaders; i++) Pthread_create(&tid_readers[i], NULL, reader, NULL); for (i = 0; i < nwriters; i++) Pthread_create(&tid_writers[i], NULL, writer, NULL); /* wait for all the threads to complete */ for (i = 0; i < nreaders; i++) Pthread_join(tid_readers[i], NULL); for (i = 0; i < nwriters; i++) Pthread_join(tid_writers[i], NULL); exit(0);}void *reader(void *arg){ int i; for (i = 0; i < nloop; i++) { pthread_rwlock_rdlock(&shared.rwlock); pthread_mutex_lock(&shared.rcountlock); shared.nreaders++; /* shared by all readers; must protect */ pthread_mutex_unlock(&shared.rcountlock); if (shared.nwriters > 0) err_quit("reader: %d writers found", shared.nwriters); pthread_mutex_lock(&shared.rcountlock); shared.nreaders--; /* shared by all readers; must protect */ pthread_mutex_unlock(&shared.rcountlock); pthread_rwlock_unlock(&shared.rwlock); } return(NULL);}void *writer(void *arg){ int i; for (i = 0; i < nloop; i++) { pthread_rwlock_wrlock(&shared.rwlock); shared.nwriters++; /* only one writer; need not protect */ if (shared.nwriters > 1) err_quit("writer: %d writers found", shared.nwriters); if (shared.nreaders > 0) err_quit("writer: %d readers found", shared.nreaders); shared.nwriters--; /* only one writer; need not protect */ pthread_rwlock_unlock(&shared.rwlock); } return(NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -