- 论坛徽章:
- 0
|
sem_t mutex;
sem_t put;
sem_t get;
sem_init(mutex, 1, 1);
sem_init(put, 1, 100);//有100个可用的资源
sem_init(get, 1, 0);
int produce(){//位于独立的进程中
sem_wait(&put);
sem_wait(&mutex);
操作共享资源(操作过程中,程序异常终止,即没有执行下面的sem_post(&mutex)程序就终止了)
sem_post(&mutex);
sem_post(&get);
}
int consurne(){//位于独立的进程中
sem_wait(&get);
sem_wait(&mutex);
操作共享资源(操作过程中,程序异常终止,即没有执行下面的sem_post(&mutex)程序就终止了)
sem_post(&mutex);
sem_post(&put);
}
前提:
produce()和consurne()分别在不用的进程中;
信号灯mutex、put、get位于共享内存中,以便各进程之间共享;
问题:
如果是在操作共享资源过程中,程序异常终止,因为还没有执行sem_post(&mutex)程序就终止,此时的mutex的值为0;
因此,其中某个进程再次启动,但由于此时的mutex的值为0,所以发生死锁现象。如何解决这个问题?
[ 本帖最后由 hzx317 于 2006-10-28 21:11 编辑 ] |
|