在一个飞机订票系统中,多个用户共享一个数据库。各用户可以同时查询信息,若有一个用户需要订票,需要更新数据库时,其余所有用户都不可以访问数据库。请用 P,V 操作设计一个同步算法,实现用户查询与订票功能。要求:当一个用户订票而需要更新数据库时,不能因不断有查询者到来而使其长时间等待。利用信号量机制保证其正常运行。

区块链毕设网qklbishe.com为您提供问题的解答

在一个飞机订票系统中,多个用户共享一个数据库。各用户可以同时查询信息,若有一个用户需要订票,需要更新数据库时,其余所有用户都不可以访问数据库。请用 P,V 操作设计一个同步算法,实现用户查询与订票功能。要求:当一个用户订票而需要更新数据库时,不能因不断有查询者到来而使其长时间等待。利用信号量机制保证其正常运行。

解:保证写者优先于读者,即一旦有写者到达时,则新读者要等待。
信号量:
● rmutex——当至少有一个写者到达时,阻止所有读者访问的互斥操作信号量,初值为1。
● wmutex——写者间以及读者与写者间互斥操作信号量,初值为1。
● x——控制 readcount 变量修改的互斥信号量,初值为1。
● y——控制 writecount 变量修改的互斥信号量,初值为1。
● z——有写者时只允许一个读者在 rmutex 上排队,其他读者在信号量z上排队,初值为1。

计数变量:
● readcount——读者计数器,初值为0。 它控制对 wmutex 的设置。

● writecount——写者数目,初值为0。 它控制对 rmutex 的设置。

semaphore rmutex = 1; 

semaphore wmutex = 1; 

semaphore x = 1; 

semaphore y = 1; 

semaphore z = 1; 

semaphore readcount = 0; 

semaphore writecount = 0; 

读者进程:
while (TRUE) {
    P(z);   // 判断是否有写者

    P(rmutex);
    P(x);
    readcount++;
    if (readcount == 1)
        P(wmutex);
    V(x);
    V(rmutex);

    V(z);
    执行读操作
    P(x);
    readcount–;
    if(readcount == 0)
        V(wmutex);

    V(x);
}

写者进程:
while (TRUE) {
    P(y);
    writecount++;
    if(writecount == 1)
        P(rmutex);
    V(y);

    P(wmutex);
    执行写操作
    V(wmutex);

    P(y);
    writecount–;
    if(writecount == 0)
        V(rmutex);

    V(y);
}

26:52

以上就是关于问题在一个飞机订票系统中,多个用户共享一个数据库。各用户可以同时查询信息,若有一个用户需要订票,需要更新数据库时,其余所有用户都不可以访问数据库。请用 P,V 操作设计一个同步算法,实现用户查询与订票功能。要求:当一个用户订票而需要更新数据库时,不能因不断有查询者到来而使其长时间等待。利用信号量机制保证其正常运行。的答案

欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。

区块链NFT链游项目方科学家脚本开发培训

承接区块链项目定制开发

微信:btc9767

QQ :1330797917

TELEGRAM: BTCOK9

承接区块链项目定制开发


qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 在一个飞机订票系统中,多个用户共享一个数据库。各用户可以同时查询信息,若有一个用户需要订票,需要更新数据库时,其余所有用户都不可以访问数据库。请用 P,V 操作设计一个同步算法,实现用户查询与订票功能。要求:当一个用户订票而需要更新数据库时,不能因不断有查询者到来而使其长时间等待。利用信号量机制保证其正常运行。