Cory McWilliams
79022e1e1f
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3621 ed5197a5-7fde-0310-b194-c3ffbd925b24
58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <uv.h>
|
|
|
|
uv_barrier_t blocker;
|
|
uv_rwlock_t numlock;
|
|
int shared_num;
|
|
|
|
void reader(void *n)
|
|
{
|
|
int num = *(int *)n;
|
|
int i;
|
|
for (i = 0; i < 20; i++) {
|
|
uv_rwlock_rdlock(&numlock);
|
|
printf("Reader %d: acquired lock\n", num);
|
|
printf("Reader %d: shared num = %d\n", num, shared_num);
|
|
uv_rwlock_rdunlock(&numlock);
|
|
printf("Reader %d: released lock\n", num);
|
|
}
|
|
uv_barrier_wait(&blocker);
|
|
}
|
|
|
|
void writer(void *n)
|
|
{
|
|
int num = *(int *)n;
|
|
int i;
|
|
for (i = 0; i < 20; i++) {
|
|
uv_rwlock_wrlock(&numlock);
|
|
printf("Writer %d: acquired lock\n", num);
|
|
shared_num++;
|
|
printf("Writer %d: incremented shared num = %d\n", num, shared_num);
|
|
uv_rwlock_wrunlock(&numlock);
|
|
printf("Writer %d: released lock\n", num);
|
|
}
|
|
uv_barrier_wait(&blocker);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
uv_barrier_init(&blocker, 4);
|
|
|
|
shared_num = 0;
|
|
uv_rwlock_init(&numlock);
|
|
|
|
uv_thread_t threads[3];
|
|
|
|
int thread_nums[] = {1, 2, 1};
|
|
uv_thread_create(&threads[0], reader, &thread_nums[0]);
|
|
uv_thread_create(&threads[1], reader, &thread_nums[1]);
|
|
|
|
uv_thread_create(&threads[2], writer, &thread_nums[2]);
|
|
|
|
uv_barrier_wait(&blocker);
|
|
uv_barrier_destroy(&blocker);
|
|
|
|
uv_rwlock_destroy(&numlock);
|
|
return 0;
|
|
}
|