我正在尝试在C中实现第一个读者编写者问题(读者的偏好)。我正在使用互斥锁和解锁来确保如果读者有锁和任何读者,没有作家可以访问该线程如果第一个阅读器有锁,则可以访问该线程。这是我的代码。我无法得到我的代码直到结束,即它没有到达线程连接部分。我想我在某个地方遇到了僵局,或者我正在放置我的互斥锁并在错误的地方解锁。
date=2016-04-11 time=11:26:29 logid=0000000013 type=traffic
subtype=forward level=notice vd=root srcip=10.10.24.232 srcport=35321
srcintf="port2" dstip=173.252.74.22 dstport=443 dstintf="wan1"
poluuid=426a22f0-b2d8-51e5-4e06-b3d158ed335f sessionid=11469008
proto=6 action=deny policyid=33 dstcountry="United States"
srccountry="Reserved" trandisp=snat transip=202.166.220.127
transport=35321 service="HTTPS" appid=15832 app="Facebook"
appcat="Social.Media" apprisk=medium applist="GEN-ACC-FBBLK"
appact=drop-session duration=22 sentbyte=120 rcvdbyte=60 sentpkt=2
utmaction=block countapp=1 utmref=62972-2591658 date=2016-04-11
time=11:26:29 logid=0000000013 type=traffic subtype=forward
level=notice vd=root srcip=10.10.37.60 srcport=43857 srcintf="port2"
dstip=202.166.193.187 dstport=443 dstintf="wan1"
poluuid=426a22f0-b2d8-51e5-4e06-b3d158ed335f sessionid=11373387
proto=6 action=close policyid=33 dstcountry="Nepal"
srccountry="Reserved" trandisp=snat transip=202.166.220.127
transport=43857 service="HTTPS" appid=41542 app="SSL_TLSv1.0"
appcat="Network.Service" apprisk=medium applist="GEN-ACC-FBBLK"
appact=detected duration=424 sentbyte=1320 rcvdbyte=1582 sentpkt=10
rcvdpkt=16 utmaction=allow countapp=2 utmref=62972-2591632
答案 0 :(得分:3)
你的代码很乱。它有几个问题,每一个都破坏了你试图实现的RW锁定机制。
if (account_list[i].accno == update_acc[j].accno)
)读取而不排除其他编写者。我的建议是使用POSIX pthread_rwlock_init
和朋友。
如果您坚持自己这样做,那么请至少阅读这篇Concurrent Control with "Readers" and "Writers"论文,以获得有关如何实施该论文的灵感。