{"id":829,"date":"2017-12-20T16:19:19","date_gmt":"2017-12-20T08:19:19","guid":{"rendered":"https:\/\/damogame.cn:15443\/wordpress\/?p=829"},"modified":"2017-12-20T16:19:19","modified_gmt":"2017-12-20T08:19:19","slug":"interlockedcompareexchange","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/829","title":{"rendered":"InterlockedCompareExchange"},"content":{"rendered":"<dl class=\"lemmaWgt-lemmaTitle lemmaWgt-lemmaTitle-\">\n<dd class=\"lemmaWgt-lemmaTitle-title\">\u00a0<a class=\"edit-lemma cmn-btn-hover-blue cmn-btn-28 j-edit-link\" style=\"font-size: 16px;\">\u7f16\u8f91<\/a><\/dd>\n<\/dl>\n<div class=\"edit-prompt\">\u672c\u8bcd\u6761\u7f3a\u5c11<strong>\u4fe1\u606f\u680f<\/strong>\u3001<strong>\u540d\u7247\u56fe<\/strong>\uff0c\u8865\u5145\u76f8\u5173\u5185\u5bb9\u4f7f\u8bcd\u6761\u66f4\u5b8c\u6574\uff0c\u8fd8\u80fd\u5feb\u901f\u5347\u7ea7\uff0c\u8d76\u7d27\u6765<a class=\"edit-prompt-link j-edit-link\">\u7f16\u8f91<\/a>\u5427\uff01<\/div>\n<div class=\"lemma-summary\">\n<div class=\"para\">InterlockedCompareExchange\u662f\u628a\u76ee\u6807<a href=\"https:\/\/baike.baidu.com\/item\/%E6%93%8D%E4%BD%9C%E6%95%B0\/7658270\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"7658270\">\u64cd\u4f5c\u6570<\/a>\uff08\u7b2c1\u53c2\u6570\u6240\u6307\u5411\u7684\u5185\u5b58\u4e2d\u7684\u6570\uff09\u4e0e\u4e00\u4e2a\u503c\uff08\u7b2c3\u53c2\u6570\uff09\u6bd4\u8f83\uff0c\u5982\u679c\u76f8\u7b49\uff0c\u5219\u7528\u53e6\u4e00\u4e2a\u503c\uff08\u7b2c2\u53c2\u6570\uff09\u4e0e\u76ee\u6807\u64cd\u4f5c\u6570\uff08\u7b2c1\u53c2\u6570\u6240\u6307\u5411\u7684\u5185\u5b58\u4e2d\u7684\u6570\uff09\u4ea4\u6362\uff1bInterlockedExchange\u662f\u4e0d\u6bd4\u8f83\u76f4\u63a5\u4ea4\u6362\u3002<\/div>\n<\/div>\n<div class=\"configModuleBanner\"><\/div>\n<div class=\"lemmaWgt-lemmaCatalog\">\n<div class=\"lemma-catalog\">\n<h2 class=\"block-title\">\u76ee\u5f55<\/h2>\n<div class=\"catalog-list column-3\">\n<ol>\n<li class=\"level1\"><span class=\"index\">1<\/span>\u00a0<span class=\"text\"><a href=\"https:\/\/baike.baidu.com\/item\/InterlockedCompareExchange\/659889?fr=aladdin#1\">\u51fd\u6570\u529f\u80fd<\/a><\/span><\/li>\n<li class=\"level2\"><span class=\"index\">\u25aa<\/span>\u00a0<span class=\"text\"><a href=\"https:\/\/baike.baidu.com\/item\/InterlockedCompareExchange\/659889?fr=aladdin#1_1\">\u589e\u51cf<\/a><\/span><\/li>\n<li class=\"level2\"><span class=\"index\">\u25aa<\/span>\u00a0<span class=\"text\"><a href=\"https:\/\/baike.baidu.com\/item\/InterlockedCompareExchange\/659889?fr=aladdin#1_2\">\u4ea4\u6362<\/a><\/span><\/li>\n<\/ol>\n<ol>\n<li class=\"level2\"><span class=\"index\">\u25aa<\/span>\u00a0<span class=\"text\"><a href=\"https:\/\/baike.baidu.com\/item\/InterlockedCompareExchange\/659889?fr=aladdin#1_3\">\u6bd4\u8f83\u4ea4\u6362<\/a><\/span><\/li>\n<li class=\"level1\"><span class=\"index\">2<\/span>\u00a0<span class=\"text\"><a href=\"https:\/\/baike.baidu.com\/item\/InterlockedCompareExchange\/659889?fr=aladdin#2\">\u53c2\u6570<\/a><\/span><\/li>\n<li class=\"level1\"><span class=\"index\">3<\/span>\u00a0<span class=\"text\"><a href=\"https:\/\/baike.baidu.com\/item\/InterlockedCompareExchange\/659889?fr=aladdin#3\">\u8fd4\u56de\u503c<\/a><\/span><\/li>\n<\/ol>\n<ol>\n<li class=\"level1\"><span class=\"index\">4<\/span>\u00a0<span class=\"text\"><a href=\"https:\/\/baike.baidu.com\/item\/InterlockedCompareExchange\/659889?fr=aladdin#4\">\u5907\u6ce8<\/a><\/span><\/li>\n<li class=\"level1\"><span class=\"index\">5<\/span>\u00a0<span class=\"text\"><a href=\"https:\/\/baike.baidu.com\/item\/InterlockedCompareExchange\/659889?fr=aladdin#5\">\u793a\u4f8b<\/a><\/span><\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"anchor-list\"><a class=\"lemma-anchor para-title\" name=\"1\"><\/a><a class=\"lemma-anchor \" name=\"sub736223_1\"><\/a><a class=\"lemma-anchor \" name=\"\u51fd\u6570\u529f\u80fd\"><\/a><\/div>\n<div class=\"para-title level-2\">\n<h2 class=\"title-text\">\u51fd\u6570\u529f\u80fd<\/h2>\n<p><a class=\"edit-icon j-edit-link\" data-edit-dl=\"1\">\u7f16\u8f91<\/a><\/div>\n<div class=\"para\">\u6574\u4e2a\u64cd\u4f5c\u8fc7\u7a0b\u662f\u9501\u5b9a\u5185\u5b58\u7684\uff0c\u5176\u5b83\u5904\u7406\u5668\u4e0d\u4f1a\u540c\u65f6\u8bbf\u95ee\u5185\u5b58\uff0c\u4ece\u800c\u5b9e\u73b0\u591a\u5904\u7406\u5668\u73af\u5883\u4e0b\u7684\u7ebf\u7a0b\u4e92\u65a5\u3002<\/div>\n<div class=\"para\">InterlockedCompareExchange\u5c5e\u4e8eInterlocked\u7cfb\u5217\u4e92\u9501\u51fd\u6570\u4e4b\u4e00\uff0c\u5e38\u7528\u4e8e\u591a\u7ebf\u7a0b\u7f16\u7a0b\u3002\u7c7b\u4f3c\u7684\u8fd8\u6709\u4e0b\u9762\u7684\u51e0\u4e2a\uff1a<\/div>\n<div class=\"anchor-list\"><a class=\"lemma-anchor para-title\" name=\"1_1\"><\/a><a class=\"lemma-anchor \" name=\"sub736223_1_1\"><\/a><a class=\"lemma-anchor \" name=\"\u589e\u51cf\"><\/a><a class=\"lemma-anchor \" name=\"1-1\"><\/a><\/div>\n<div class=\"para-title level-3\">\n<h3 class=\"title-text\">\u589e\u51cf<\/h3>\n<\/div>\n<div class=\"para\">\uff081\uff09 LONG\u00a0<a href=\"https:\/\/baike.baidu.com\/item\/InterlockedIncrement\" target=\"_blank\" rel=\"noopener\">InterlockedIncrement<\/a>(IN OUT LONG volatile *lpAddend);<\/div>\n<div class=\"para\">lpAddend\u4e3a\u957f<a href=\"https:\/\/baike.baidu.com\/item\/%E6%95%B4%E5%9E%8B%E5%8F%98%E9%87%8F\" target=\"_blank\" rel=\"noopener\">\u6574\u578b\u53d8\u91cf<\/a>\u7684\u5730\u5740\uff0c<a href=\"https:\/\/baike.baidu.com\/item\/%E8%BF%94%E5%9B%9E%E5%80%BC\/9629649\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"9629649\">\u8fd4\u56de\u503c<\/a>\u4e3a\u539f\u59cb\u503c\u3002\u8fd9\u4e2a\u51fd\u6570\u7684\u4e3b\u8981\u4f5c\u7528\u662f\u539f\u5b50\u6027\u81ea\u589e(\u76f8\u5f53\u4e8e++\u64cd\u4f5c)\u3002<\/div>\n<div class=\"para\">\uff082\uff09 LONG InterlockedDecrement(IN OUT LONG volatile *lpAddend);<\/div>\n<div class=\"para\">lpAddend\u4e3a\u957f\u6574\u578b\u53d8\u91cf\u7684\u5730\u5740\uff0c\u8fd4\u56de\u503c\u4e3a\u539f\u59cb\u503c\u3002\u8fd9\u4e2a\u51fd\u6570\u7684\u4e3b\u8981\u4f5c\u7528\u662f\u539f\u5b50\u6027\u81ea\u51cf(\u76f8\u5f53\u4e8e&#8211;\u64cd\u4f5c)\u3002<\/div>\n<div class=\"para\">\uff083\uff09 LONG\u00a0<a href=\"https:\/\/baike.baidu.com\/item\/InterlockedExchangeAdd\" target=\"_blank\" rel=\"noopener\">InterlockedExchangeAdd<\/a>( LPLONG Addend, LONG Increment );<\/div>\n<div class=\"para\">Addend\u4e3a<a href=\"https:\/\/baike.baidu.com\/item\/%E9%95%BF%E6%95%B4%E5%9E%8B\/325017\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"325017\">\u957f\u6574\u578b<\/a>\u53d8\u91cf\u7684\u5730\u5740\uff0cIncrement\u4e3a\u60f3\u8981\u5728Addend\u6307\u5411\u7684\u957f\u6574\u578b\u53d8\u91cf\u4e0a\u589e\u52a0\u7684\u6570\u503c\uff08\u53ef\u4ee5\u662f\u8d1f\u6570\uff09\u3002\u8fd9\u4e2a\u51fd\u6570\u7684\u4e3b\u8981\u4f5c\u7528\u662f\u4fdd\u8bc1\u8fd9\u4e2a\u52a0\u64cd\u4f5c\u4e3a\u4e00\u4e2a\u539f\u5b50\u8bbf\u95ee\u3002<\/div>\n<div class=\"anchor-list\"><a class=\"lemma-anchor para-title\" name=\"1_2\"><\/a><a class=\"lemma-anchor \" name=\"sub736223_1_2\"><\/a><a class=\"lemma-anchor \" name=\"\u4ea4\u6362\"><\/a><a class=\"lemma-anchor \" name=\"1-2\"><\/a><\/div>\n<div class=\"para-title level-3\">\n<h3 class=\"title-text\">\u4ea4\u6362<\/h3>\n<\/div>\n<div class=\"para\">\uff081\uff09 LONG InterlockedExchange( LPLONG Target, LONG Value );<\/div>\n<div class=\"para\">\uff082\uff09 PVOID InterlockedExchangePointer( PVOID *Target, PVOID Value );<\/div>\n<div class=\"para\">\u7528\u7b2c\u4e8c\u4e2a\u53c2\u6570\u7684\u503c\u53d6\u4ee3\u7b2c\u4e00\u4e2a\u53c2\u6570\u6307\u5411\u7684\u503c\u3002\u51fd\u6570<a href=\"https:\/\/baike.baidu.com\/item\/%E8%BF%94%E5%9B%9E%E5%80%BC\/9629649\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"9629649\">\u8fd4\u56de\u503c<\/a>\u4e3a\u539f\u59cb\u503c\u3002<\/div>\n<div class=\"anchor-list\"><a class=\"lemma-anchor para-title\" name=\"1_3\"><\/a><a class=\"lemma-anchor \" name=\"sub736223_1_3\"><\/a><a class=\"lemma-anchor \" name=\"\u6bd4\u8f83\u4ea4\u6362\"><\/a><a class=\"lemma-anchor \" name=\"1-3\"><\/a><\/div>\n<div class=\"para-title level-3\">\n<h3 class=\"title-text\">\u6bd4\u8f83\u4ea4\u6362<\/h3>\n<\/div>\n<div class=\"para\">\uff081\uff09 LONG InterlockedCompareExchange(<\/div>\n<div class=\"para\">LPLONG Destination, LONG Exchange, LONG Comperand );<\/div>\n<div class=\"para\">\uff082\uff09 PVOID InterlockedCompareExchangePointer(<\/div>\n<div class=\"para\">PVOID *Destination, PVOID Exchange, PVOID Comperand );<\/div>\n<div class=\"para\">\u5982\u679c\u7b2c\u4e09\u4e2a\u53c2\u6570\u4e0e\u7b2c\u4e00\u4e2a\u53c2\u6570\u6307\u5411\u7684\u503c\u76f8\u540c\uff0c\u90a3\u4e48\u7528\u7b2c\u4e8c\u4e2a\u53c2\u6570\u53d6\u4ee3\u7b2c\u4e00\u4e2a\u53c2\u6570\u6307\u5411\u7684\u503c\u3002\u51fd\u6570<a href=\"https:\/\/baike.baidu.com\/item\/%E8%BF%94%E5%9B%9E%E5%80%BC\/9629649\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"9629649\">\u8fd4\u56de\u503c<\/a>\u4e3a\u539f\u59cb\u503c\u3002<\/div>\n<div class=\"anchor-list\"><a class=\"lemma-anchor para-title\" name=\"2\"><\/a><a class=\"lemma-anchor \" name=\"sub736223_2\"><\/a><a class=\"lemma-anchor \" name=\"\u53c2\u6570\"><\/a><\/div>\n<div class=\"para-title level-2\">\n<h2 class=\"title-text\">\u53c2\u6570<\/h2>\n<p><a class=\"edit-icon j-edit-link\" data-edit-dl=\"2\">\u7f16\u8f91<\/a><\/div>\n<div class=\"para\">[in, out] Destination<\/div>\n<div class=\"para\">\u5bf9\u76ee\u6807\u6307\u9488\u7684\u503c\u3002 \u8be5\u7b26\u53f7\u88ab\u5ffd\u7565\u3002<\/div>\n<div class=\"para\">[in] Exchange \u4ea4\u6362\u503c\u3002 \u8be5\u7b26\u53f7\u88ab\u5ffd\u7565\u3002<\/div>\n<div class=\"para\">[in] ExchangeHigh \u76ee\u6807\u7684\u9ad8\u90e8\u5206\u4ea4\u6362\u503c\u3002<\/div>\n<div class=\"para\">[in] ExchangeLow \u76ee\u6807\u7684\u4e0b\u534a\u90e8\u5206\u4ea4\u6362\u503c\u3002<\/div>\n<div class=\"para\">[in] Comparand \u6bd4\u8f83\u7684\u503c\u4e0e\u76ee\u6807\u3002 \u8be5\u7b26\u53f7\u88ab\u5ffd\u7565\u3002<\/div>\n<div class=\"anchor-list\"><a class=\"lemma-anchor para-title\" name=\"3\"><\/a><a class=\"lemma-anchor \" name=\"sub736223_3\"><\/a><a class=\"lemma-anchor \" name=\"\u8fd4\u56de\u503c\"><\/a><\/div>\n<div class=\"para-title level-2\">\n<h2 class=\"title-text\">\u8fd4\u56de\u503c<\/h2>\n<p><a class=\"edit-icon j-edit-link\" data-edit-dl=\"3\">\u7f16\u8f91<\/a><\/div>\n<div class=\"para\">\u8fd4\u56de\u503c\u662f\u00a0<a href=\"https:\/\/baike.baidu.com\/item\/Destination\" target=\"_blank\" rel=\"noopener\">Destination<\/a>\u00a0\u6307\u9488\u7684\u521d\u59cb\u503c\u3002<\/div>\n<div class=\"anchor-list\"><a class=\"lemma-anchor para-title\" name=\"4\"><\/a><a class=\"lemma-anchor \" name=\"sub736223_4\"><\/a><a class=\"lemma-anchor \" name=\"\u5907\u6ce8\"><\/a><\/div>\n<div class=\"para-title level-2\">\n<h2 class=\"title-text\">\u5907\u6ce8<\/h2>\n<p><a class=\"edit-icon j-edit-link\" data-edit-dl=\"4\">\u7f16\u8f91<\/a><\/div>\n<div class=\"para\">\u8bf7\u6ce8\u610f\uff0c\u751f\u6210\u5185\u90e8\u5c55\u5f00\uff0c\u9700\u8981\u4f7f\u7528 \/Oi\u3002\u00a0<b>\/Oi<\/b>\u00a0\u63d0\u793a\u4e0e\u00a0<b>\/O2<\/b>\u3002<\/div>\n<div class=\"para\">\u82e5\u8981\u58f0\u660e\u4e00\u4e2a\u4e92\u9501\u7684\u51fd\u6570\u7528\u4f5c\u5185\u90e8\uff0c\u5fc5\u987b\u58f0\u660e\u51fd\u6570\u4f7f\u7528\u53cd\u659c\u524d\u5bfc<a href=\"https:\/\/baike.baidu.com\/item\/%E4%B8%8B%E5%88%92%E7%BA%BF\/9768709\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"9768709\">\u4e0b\u5212\u7ebf<\/a>\uff0c\u5e76\u4e14\u65b0\u7684\u51fd\u6570\u5fc5\u987b\u51fa\u73b0\u5728\u00a0<a href=\"https:\/\/baike.baidu.com\/item\/%23pragma\/706691\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"706691\">#pragma<\/a>\u00a0\u5185\u90e8 \u8bed\u53e5\u3002 \u4e3a\u4e86\u65b9\u4fbf\u8d77\u89c1\uff0c\u51fd\u6570\u7684\u5185\u90e8\u7248\u672c\u3002 #define \u8bed\u53e5\u4e2d\u58f0\u660e\u51fa\u73b0\u5728<a href=\"https:\/\/baike.baidu.com\/item\/%E6%BA%90%E4%BB%A3%E7%A0%81\/3969\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"3969\">\u6e90\u4ee3\u7801<\/a>\uff0c\u800c\u65e0\u9700\u8fd9\u4e2a\u524d\u5bfc\u4e0b\u5212\u7ebf\u3002<\/div>\n<div class=\"para\"><b>_InterlockedCompareExchange<\/b>\u00a0\u6267\u884c Destination \u503c\u7684\u57fa\u672c\u6bd4\u8f83\u4e0e Comparand \u503c\u3002 \u5982\u679c Destination \u503c\u4e0e Comparand \u503c\u76f8\u7b49\uff0c Exchange\u503c\u3002 Destination\u6307\u5b9a\u7684\u5730\u5740\u5b58\u50a8\u3002 \u5426\u5219\uff0c\u4e0d\u6267\u884c\u64cd\u4f5c\u3002<\/div>\n<div class=\"para\">\u6709\u5173\u6b64\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u4f7f\u7528\u00a0<b>_InterlockedCompareExchange<\/b>\uff0c\u8bf7\u53c2\u89c1 InterlockedDecrement\u3002<\/div>\n<div class=\"para\">\u5177\u6709\u6839\u636e\u6570\u636e\u7c7b\u578b\u6240\u6d89\u53ca\u5728\u00a0<b>_InterlockedCompareExchange<\/b>\u00a0\u7684\u591a\u79cd\u53d8\u4f53\uff0c\u5e76\u5904\u7406\u5668\u7279\u5b9a\u662f\u5426\u53ef\u6355\u83b7\u6216\u4f7f\u7528\u8bed\u4e49\u7248\u672c\u3002<\/div>\n<div class=\"para\">\u5f53\u00a0<b>_InterlockedCompareExchange<\/b>\u00a0\u51fd\u6570\u5bf9\u957f\u6574\u6570\u503c\u65f6\uff0c\u00a0<b>_InterlockedCompareExchange16<\/b>\u00a0\u5bf9\u77ed\u6574\u578b\u503c\uff0c\u5e76<b>_InterlockedCompareExchange64<\/b>\u00a0\u5bf9 64 \u4f4d\u6574\u6570\u503c\u3002 \u7531\u4e8e\u00a0<b>_InterlockedCompareExchange64<\/b>\u00a0\u4f7f\u7528 cmpxchg8b \u547d\u4ee4\uff0c\u5219\u4e0d\u80fd\u5728\u4e4b\u524d Pentium \u5904\u7406\u5668\uff0c\u5982 486\u3002<\/div>\n<div class=\"para\">IPF \u7279\u5b9a\u00a0<b>_InterlockedCompareExchange_acq<\/b>\u3001\u00a0<b>_InterlockedCompareExchange16_acq<\/b>\u548c\u00a0<b>_InterlockedCompareExchange64_acq<\/b>\u00a0\u5185\u90e8\u51fd\u6570\u662f\u4e0d acq \u540e\u7f00\uff0c\u4f46\u64cd\u4f5c\u7684\u76f8\u5e94\u529f\u80fd\u6267\u884c\u83b7\u53d6\u8bed\u4e49\uff0c\u5f88\u6709\u7528\uff0c\u5728\u8f93\u5165<a href=\"https:\/\/baike.baidu.com\/item\/%E4%B8%B4%E7%95%8C%E5%8C%BA\/8942134\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"8942134\">\u4e34\u754c\u533a<\/a>\u65f6\u7684\u884c\u4e3a\u76f8\u540c\u3002<\/div>\n<div class=\"para\"><b>_InterlockedCompareExchange_rel<\/b>\u3001\u00a0<b>_InterlockedCompareExchange16_rel<\/b>\u548c\u00a0<b>_InterlockedCompareExchange64_rel<\/b>\u00a0\u5185\u90e8\u51fd\u6570\u662f\u4e0drel \u540e\u7f00\uff0c\u4f46\u64cd\u4f5c\u7684\u76f8\u5e94\u51fd\u6570\u6267\u884c\u4e0e\u7248\u672c\u8bed\u4e49\uff0c\u5f88\u6709\u7528\uff0c\u5728\u79bb\u5f00<a href=\"https:\/\/baike.baidu.com\/item\/%E4%B8%B4%E7%95%8C%E5%8C%BA\/8942134\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"8942134\">\u4e34\u754c\u533a<\/a>\u65f6\u7684\u884c\u4e3a\u76f8\u540c\u3002<\/div>\n<div class=\"para\">\u8fd9\u4e9b\u529f\u80fd\u7684\u884c\u4e3a\u5c31\u5982\u540c\u8bfb\u5199<a href=\"https:\/\/baike.baidu.com\/item\/%E5%86%85%E5%AD%98%E5%B1%8F%E9%9A%9C\/13014423\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"13014423\">\u5185\u5b58\u5c4f\u969c<\/a>\u00a0\u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 ReadWriteBarrier\u3002<\/div>\n<div class=\"para\">\u8fd9\u4e9b\u5b9e\u4f8b\u53ea\u80fd\u7528\u4f5c\u5185\u90e8\u3002<\/div>\n<div class=\"anchor-list\"><a class=\"lemma-anchor para-title\" name=\"5\"><\/a><a class=\"lemma-anchor \" name=\"sub736223_5\"><\/a><a class=\"lemma-anchor \" name=\"\u793a\u4f8b\"><\/a><\/div>\n<div class=\"para-title level-2\">\n<h2 class=\"title-text\">\u793a\u4f8b<\/h2>\n<p><a class=\"edit-icon j-edit-link\" data-edit-dl=\"5\">\u7f16\u8f91<\/a><\/div>\n<div class=\"para\">\u5728\u4e0b\u9762\u7684\u793a\u4f8b\u4e2d\uff0c _InterlockedCompareExchange \u5bf9\u4e8e\u7b80\u5355\u7684\u4f4e\u7ea7\u522b<a href=\"https:\/\/baike.baidu.com\/item\/%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5\/4855164\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"4855164\">\u7ebf\u7a0b\u540c\u6b65<\/a>\u4f7f\u7528\u3002 \u8fd9\u79cd\u65b9\u6cd5\u90fd\u6709\u5176\u5c40\u9650\u6027\u57fa\u4e8e\u591a\u7ebf\u7a0b\u7f16\u7a0b;\u5b58\u5728\u5b83\u9610\u91ca\u4e92\u9501\u56fa\u6709\u7684\u5178\u578b\u7528\u6cd5\u3002 \u4e3a\u4e86\u83b7\u5f97\u6700\u4f73\u7ed3\u679c\uff0c\u8bf7\u4f7f\u7528 windows API\u3002 \u6709\u5173\u591a\u7ebf\u7a0b\u7f16\u7a0b\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 \u7f16\u5199\u591a\u7ebf\u7a0b Win32 \u7a0b\u5e8f\u3002<\/div>\n<div class=\"para\">\/\/ intrinExample.cpp<\/div>\n<div class=\"para\">\/\/ compile with: \/EHsc \/O2<\/div>\n<div class=\"para\">\/\/ Simple example of using _Interlocked* intrinsics to<\/div>\n<div class=\"para\">\/\/ do manual synchronization<\/div>\n<div class=\"para\">\/\/<\/div>\n<div class=\"para\">\/\/ Add [-DSKIP_LOCKING] to the command line to disable<\/div>\n<div class=\"para\">\/\/ the locking. This will cause the threads to execute out<\/div>\n<div class=\"para\">\/\/ of sequence.<\/div>\n<div class=\"para\">#define _CRT_RAND_S<\/div>\n<div class=\"para\">#include &#8220;windows.h&#8221;<\/div>\n<div class=\"para\">#include &lt;iostream&gt;<\/div>\n<div class=\"para\">#include &lt;queue&gt;<\/div>\n<div class=\"para\">#include &lt;intrin.h&gt;<\/div>\n<div class=\"para\">using namespace std;<\/div>\n<div class=\"para\">\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<\/div>\n<div class=\"para\">\/\/ if defined, will not do any locking on shared data<\/div>\n<div class=\"para\">\/\/#define SKIP_LOCKING<\/div>\n<div class=\"para\">\/\/ A common way of locking using _InterlockedCompareExchange.<\/div>\n<div class=\"para\">\/\/ Please refer to other sources for a discussion of the many issues<\/div>\n<div class=\"para\">\/\/ involved. For example, this particular locking scheme performs well<\/div>\n<div class=\"para\">\/\/ when lock contention is low, as the while loop overhead is small and<\/div>\n<div class=\"para\">\/\/ locks are acquired very quickly, but degrades as many callers want<\/div>\n<div class=\"para\">\/\/ the lock and most threads are doing a lot of interlocked spinning.<\/div>\n<div class=\"para\">\/\/ There are also no guarantees that a caller will ever acquire the<\/div>\n<div class=\"para\">\/\/ lock.<\/div>\n<div class=\"para\">namespace MyInterlockedIntrinsicLock<\/div>\n<div class=\"para\">{<\/div>\n<div class=\"para\">typedef unsigned LOCK, *PLOCK;<\/div>\n<div class=\"para\"><a href=\"https:\/\/baike.baidu.com\/item\/%23pragma\/706691\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"706691\">#pragma<\/a>\u00a0intrinsic(_InterlockedCompareExchange, _InterlockedExchange)<\/div>\n<div class=\"para\">enum {LOCK_IS_FREE = 0, LOCK_IS_TAKEN = 1};<\/div>\n<div class=\"para\">void Lock(PLOCK pl)<\/div>\n<div class=\"para\">{<\/div>\n<div class=\"para\">#if !defined(SKIP_LOCKING)<\/div>\n<div class=\"para\">\/\/ If *pl == LOCK_IS_FREE, it is set to LOCK_IS_TAKEN<\/div>\n<div class=\"para\">\/\/ atomically, so only 1 caller gets the lock.<\/div>\n<div class=\"para\">\/\/ If *pl == LOCK_IS_TAKEN,<\/div>\n<div class=\"para\">\/\/ the result is LOCK_IS_TAKEN, and the while loop keeps spinning.<\/div>\n<div class=\"para\">while (_InterlockedCompareExchange((long *)pl,<\/div>\n<div class=\"para\">LOCK_IS_TAKEN, \/\/ exchange<\/div>\n<div class=\"para\">LOCK_IS_FREE) \/\/ comparand<\/div>\n<div class=\"para\">== LOCK_IS_TAKEN)<\/div>\n<div class=\"para\">{<\/div>\n<div class=\"para\">\/\/ spin!<\/div>\n<div class=\"para\">\/\/ call __yield() here on the IPF architecture to improve<\/div>\n<div class=\"para\">\/\/ performance.<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">\/\/ This will also work.<\/div>\n<div class=\"para\">\/\/while (_InterlockedExchange(pl, LOCK_IS_TAKEN) ==<\/div>\n<div class=\"para\">\/\/ LOCK_IS_TAKEN)<\/div>\n<div class=\"para\">\/\/{<\/div>\n<div class=\"para\">\/\/ \/\/ spin!<\/div>\n<div class=\"para\">\/\/}<\/div>\n<div class=\"para\">\/\/ At this point, the lock is acquired.<\/div>\n<div class=\"para\"><a href=\"https:\/\/baike.baidu.com\/item\/%23endif\/2834688\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"2834688\">#endif<\/a><\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">void Unlock(PLOCK pl) {<\/div>\n<div class=\"para\">#if !defined(SKIP_LOCKING)<\/div>\n<div class=\"para\">_InterlockedExchange((long *)pl, LOCK_IS_FREE);<\/div>\n<div class=\"para\">#endif<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div class=\"para\">\/\/ Data shared by threads<\/div>\n<div class=\"para\">queue&lt;int&gt; SharedQueue;<\/div>\n<div class=\"para\">MyInterlockedIntrinsicLock::LOCK SharedLock;<\/div>\n<div class=\"para\">int TicketNumber;<\/div>\n<div class=\"para\">\/\/ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/div>\n<div class=\"para\">DWORD WINAPI<\/div>\n<div class=\"para\">ProducerThread(<\/div>\n<div class=\"para\">LPVOID unused<\/div>\n<div class=\"para\">)<\/div>\n<div class=\"para\">{<\/div>\n<div class=\"para\">unsigned int randValue;<\/div>\n<div class=\"para\">while (1) {<\/div>\n<div class=\"para\">\/\/ Acquire shared data. Enter critical section.<\/div>\n<div class=\"para\">MyInterlockedIntrinsicLock::Lock(&amp;SharedLock);<\/div>\n<div class=\"para\">\/\/cout &lt;&lt; &#8220;&gt;&#8221; &lt;&lt; TicketNumber &lt;&lt; endl;<\/div>\n<div class=\"para\">SharedQueue.push(TicketNumber++);<\/div>\n<div class=\"para\">\/\/ Release shared data. Leave critical section.<\/div>\n<div class=\"para\">MyInterlockedIntrinsicLock::Unlock(&amp;SharedLock);<\/div>\n<div class=\"para\">rand_s(&amp;randValue);<\/div>\n<div class=\"para\">Sleep(randValue % 20);<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">return 0;<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">DWORD WINAPI<\/div>\n<div class=\"para\">ConsumerThread(<\/div>\n<div class=\"para\">LPVOID unused<\/div>\n<div class=\"para\">)<\/div>\n<div class=\"para\">{<\/div>\n<div class=\"para\">while (1) {<\/div>\n<div class=\"para\">\/\/ Acquire shared data. Enter critical section<\/div>\n<div class=\"para\">MyInterlockedIntrinsicLock::Lock(&amp;SharedLock);<\/div>\n<div class=\"para\">if (!SharedQueue.empty()) {<\/div>\n<div class=\"para\">int x = SharedQueue.front();<\/div>\n<div class=\"para\">cout &lt;&lt; &#8220;&lt;&#8221; &lt;&lt; x &lt;&lt; endl;<\/div>\n<div class=\"para\">SharedQueue.pop();<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">\/\/ Release shared data. Leave critical section<\/div>\n<div class=\"para\">MyInterlockedIntrinsicLock::Unlock(&amp;SharedLock);<\/div>\n<div class=\"para\">unsigned int randValue;<\/div>\n<div class=\"para\">rand_s(&amp;randValue);<\/div>\n<div class=\"para\">Sleep(randValue % 20);<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">return 0;<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">int main(<\/div>\n<div class=\"para\"><a href=\"https:\/\/baike.baidu.com\/item\/void\/5126319\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"5126319\">void<\/a><\/div>\n<div class=\"para\">)<\/div>\n<div class=\"para\">{<\/div>\n<div class=\"para\">const int timeoutTime = 500;<\/div>\n<div class=\"para\">int unused1, unused2;<\/div>\n<div class=\"para\">HANDLE threads[4];<\/div>\n<div class=\"para\">\/\/ The program creates 4 threads:<\/div>\n<div class=\"para\">\/\/ two producer threads adding to the queue<\/div>\n<div class=\"para\">\/\/ and two consumers taking data out and printing it.<\/div>\n<div class=\"para\">threads[0] = CreateThread(NULL,<\/div>\n<div class=\"para\">0,<\/div>\n<div class=\"para\">ProducerThread,<\/div>\n<div class=\"para\">&amp;unused1,<\/div>\n<div class=\"para\">0,<\/div>\n<div class=\"para\">(LPDWORD)&amp;unused2);<\/div>\n<div class=\"para\">threads[1] = CreateThread(NULL,<\/div>\n<div class=\"para\">0,<\/div>\n<div class=\"para\">ConsumerThread,<\/div>\n<div class=\"para\">&amp;unused1,<\/div>\n<div class=\"para\">0,<\/div>\n<div class=\"para\">(LPDWORD)&amp;unused2);<\/div>\n<div class=\"para\">threads[2] = CreateThread(NULL,<\/div>\n<div class=\"para\">0,<\/div>\n<div class=\"para\">ProducerThread,<\/div>\n<div class=\"para\">&amp;unused1,<\/div>\n<div class=\"para\">0,<\/div>\n<div class=\"para\">(LPDWORD)&amp;unused2);<\/div>\n<div class=\"para\">threads[3] = CreateThread(NULL,<\/div>\n<div class=\"para\">0,<\/div>\n<div class=\"para\">ConsumerThread,<\/div>\n<div class=\"para\">&amp;unused1,<\/div>\n<div class=\"para\">0,<\/div>\n<div class=\"para\">(LPDWORD)&amp;unused2);<\/div>\n<div class=\"para\"><a href=\"https:\/\/baike.baidu.com\/item\/WaitForMultipleObjects\/367598\" target=\"_blank\" rel=\"noopener\" data-lemmaid=\"367598\">WaitForMultipleObjects<\/a>(4, threads, TRUE, timeoutTime);<\/div>\n<div class=\"para\">return 0;<\/div>\n<div class=\"para\">}<\/div>\n<div class=\"para\">&lt;0<\/div>\n<div class=\"para\">AMP_LT1<\/div>\n<div class=\"para\">AMP_LT2<\/div>\n<div class=\"para\">AMP_LT3<\/div>\n<div class=\"para\">AMP_LT4<\/div>\n<div class=\"para\">AMP_LT5<\/div>\n<div class=\"para\">AMP_LT6<\/div>\n<div class=\"para\">AMP_LT7<\/div>\n<div class=\"para\">AMP_LT8<\/div>\n<div class=\"para\">AMP_LT9<\/div>\n<div class=\"para\">AMP_LT10<\/div>\n<div class=\"para\">AMP_LT11<\/div>\n<div class=\"para\">AMP_LT12<\/div>\n<div class=\"para\">AMP_LT13<\/div>\n<div class=\"para\">AMP_LT14<\/div>\n<div class=\"para\">AMP_LT15<\/div>\n<div class=\"para\">AMP_LT16<\/div>\n<div class=\"para\">AMP_LT17<\/div>\n<div class=\"para\">AMP_LT18<\/div>\n<div class=\"para\">AMP_LT19<\/div>\n<div class=\"para\">AMP_LT20<\/div>\n<div class=\"para\">AMP_LT21<\/div>\n<div class=\"para\">AMP_LT22<\/div>\n<div class=\"para\">AMP_LT23<\/div>\n<div class=\"para\">AMP_LT24<\/div>\n<div class=\"para\">AMP_LT25<\/div>\n<div class=\"para\">AMP_LT26<\/div>\n<div class=\"para\">AMP_LT27<\/div>\n<div class=\"para\">AMP_LT28<\/div>\n<div class=\"para\">AMP_LT29<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0\u7f16\u8f91 \u672c\u8bcd\u6761\u7f3a\u5c11\u4fe1\u606f\u680f\u3001\u540d\u7247\u56fe\uff0c\u8865\u5145\u76f8<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[118],"class_list":["post-829","post","type-post","status-publish","format-standard","hentry","tag-02-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=829"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/829\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}