锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎴戜滑浣跨敤涓鍧楁湁璁塊棶鎺у埗淇濇姢鐨勫唴瀛樼紦鍐插尯鏉ュ瓨鍌ㄨ繘紼嬫垨綰跨▼涔嬮棿鍏辯敤鐨勭殑鏁版嵁.
騫朵笖鎴戜滑闇瑕佷繚璇佹暟鎹殑瀹夊叏鎬э紝鍗充嬌server鍊掓帀錛岃繖鍧楃紦鍐插尯閲岄潰鐨勬暟鎹篃涓嶈兘涓㈠け.
1. 瀵逛簬澶氱嚎紼嬬殑鎯呭喌錛屽綋涓涓嚎紼媍ore鎺変箣鍚?姣斿鍥犱負segment fault)錛岀嚎紼嬫墍瀵瑰簲鐨勮繘紼嬪皢涓嶈兘騫稿厤.
鍦ㄨ繖縐嶆儏鍐典笅錛屽鏋滄垜浠嬌鐢ㄧ殑鏄竴鑸殑"鍐呭瓨緙撳啿鍖?quot;鑰屼笉鏄叡浜唴瀛橈紝閭d箞褰撹繘紼嬮鍑哄悗錛?
榪欏潡緙撳啿鍖哄搴旂殑鍐呭瓨絀洪棿灝嗕細琚郴緇熷洖鏀墮噸鏂板垎閰嶇粰鍏跺畠榪涚▼浣跨敤錛岀紦鍐插尯涓搴旂殑鏁版嵁涔熷氨涓㈠け浜?
浣嗘槸濡傛灉鎴戜滑鎹㈢敤鍏變韓鍐呭瓨鏉ヤ綔涓虹嚎紼嬮棿浜ゆ崲鏁版嵁鐨勭紦鍐插尯錛屾垜浠氨鑳藉緢濂界殑瑙e喅榪欎釜闂.
2. 鍦ㄥ榪涚▼鐨勬儏鍐典笅錛屼笉浣嗚兘婊¤凍涓婅堪鐗規(guī)э紝鑰屼笖鍏變韓鍐呭瓨涔熸槸榪涚▼闂存暟鎹氦鎹㈢殑涓縐嶉珮鏁堟柟寮?
鑷充簬鍏變韓鍐呭瓨鐨勬墜鍔ㄥ垹闄ら棶棰橈紝鎴戠殑鍋氭硶鏄紝鍦ㄧ敓鎴怚PC瀵硅薄鏃訛紝灝嗗搴旂殑ftok鐢熸垚鐨刱ey鍊煎啓鍏ュ埌涓涓枃浠朵腑錛?
鐢熸垚綾諱技浜庝笅闈㈢殑shell鑴氭湰錛岃繖鏍峰綋鎴戜滑闇瑕佹墜鍔ㄥ垹闄PC鏃朵篃寰堟柟渚?
ipcrm -M xxx
ipcrm -Q xxx
ipcrm -S xxx
鐩告瘮浜庨氳繃socket鏉ヤ綔涓鴻繘紼嬮棿閫氫俊鐨勬柟寮忥紝鍏變韓鍐呭瓨鐨勬渶澶т笉瓚沖湪浜?quot;涓嶈兘璺ㄦ満鍣ㄥ叡鐢?quot;.
after all, there is no silver bullet :)
]]>
闈炲父鎰熻阿浣犳彁鍑虹殑寤鴻錛屼篃嬈㈣繋浣犵戶緇叧娉紝涓璧蜂氦嫻侀棶棰橈紝鍒嗕韓緇忛獙銆?img src ="http://m.shnenglu.com/zjl-1026-2001/aggbug/108775.html" width = "1" height = "1" />
]]>
printf("Message geted is: %s \n",shm + 1);
浣嗗疄闄呬笂榪欓噷鏈変竴涓綔鍦ㄧ殑闂:
鍗沖鏋?wait_v(semid); 鎴愬姛鍚庯紝鍦ㄦ墽琛屾帴涓嬫潵鐨刾rintf("Message geted is: %s \n",shm + 1)涔嬪墠錛岃繘紼嬭鎸傝搗.
閭d箞姝ゆ椂 server 榪涚▼鍙兘浼氶噸鏂拌幏鍙栬繖涓俊鍙烽噺騫跺鍏變韓鍐呭瓨涓殑鏁版嵁榪涜鍐欐搷浣?褰撶劧錛屼綘榪欓噷鐢╯erver sleep鐨勬椂闂磋繙澶т簬client sleep鐨勬椂闂存潵瑙e喅榪欎釜闂)
褰撴寕璧風殑榪涚▼閲嶆柊琚皟搴︽姇鍏ヨ繍琛屽悗錛屾鏃秔rintf("Message geted is: %s \n",shm + 1)鐨勬暟鎹疄闄呬笂灝變笉鏄痺ait_v(semid)鎴愬姛鍚庡叡浜唴瀛樹腑瀵瑰簲鐨勬暟鎹?
鎴戣寰楀浜庤繖縐嶅吀鍨嬬殑 "provider/consumer" 妯″瀷錛屼竴縐嶆洿濂界殑鍋氭硶鏄?
// for provider // for consumer
P( write_sem ); P( read_sem );
// write operation // read operation
V( read_sem ); V( write_sem );
褰撶劧錛岃繖閲屾垜浠渶瑕佷嬌鐢?write_sem 鍜?read_sem 涓や釜淇″彿閲?
]]>