<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 3. 共享鎖和排他鎖 1. 共享鎖和排他鎖的說明 > 共享鎖:(多線程共享讀) > 這份數據是共享的,然后多個線程過來,都可以獲取同一個數據的共享鎖,然后對這個數據執行讀操作 > 排他鎖:(單線程只寫) > 是排他的操作,只能一個線程獲取排他鎖,然后執行增刪改操作 > 讀寫鎖的分離: > 1. 如果只是要讀取數據的話,那么任意個線程都可以同時進來然后讀取數據,每個線程都可以上一個共享鎖 > 2. 但是這個時候,如果有線程要過來修改數據,那么會嘗試上排他鎖,排他鎖會跟共享鎖互斥,也就是說,如果有人已經上了共享鎖了,那么排他鎖就不能上,就得等 > 3. 如果有人在讀數據,就不允許別人來修改數據。反之,也是一樣的 > 如果有人在修改數據,就是加了排他鎖: > 1. 那么其他線程過來要修改數據,也會嘗試加排他鎖,此時會失敗,鎖沖突,必須等待,同時只能有一個線程修改數據 > 2. 如果有人過來同時要讀取數據,那么會嘗試加共享鎖,此時會失敗,因為共享鎖和排他鎖是沖突的 >3. 如果有在修改數據,就不允許別人來修改數據,也不允許別人來讀取數據 2. 共享鎖和排他鎖的實驗 > 第一步:有人在讀數據,其他人也能過來讀數據(腳本) 在/usr/share/elasticsearch/config/scripts目錄(沒有就自己創建一個)下創建groovy腳本 > judge-lock-2.groovy: > 如果是排它鎖,報錯,否則共享鎖加1 ~~~ if (ctx._source.lock_type == 'exclusive') { assert false }; ctx._source.lock_count++ ~~~ * 創建doc鎖 ~~~ POST /fs/lock/1/_update { "upsert": { "lock_type": "shared", "lock_count": 1 }, "script": { "lang": "groovy", "file": "judge-lock-2" } } ~~~ ~~~ POST /fs/lock/1/_update { "upsert": { "lock_type": "shared", "lock_count": 1 }, "script": { "lang": "groovy", "file": "judge-lock-2" } } ~~~ GET /fs/lock/1 { "_index": "fs", "_type": "lock", "_id": "1", "_version": 3, "found": true, "_source": { "lock_type": "shared", "lock_count": 3 } } 就給大家模擬了,有人上了共享鎖,你還是要上共享鎖,直接上就行了,沒問題,只是lock_count加1 2、已經有人上了共享鎖,然后有人要上排他鎖 PUT /fs/lock/1/_create { "lock_type": "exclusive" } 排他鎖用的不是upsert語法,create語法,要求lock必須不能存在,直接自己是第一個上鎖的人,上的是排他鎖 { "error": { "root_cause": [ { "type": "version_conflict_engine_exception", "reason": "[lock][1]: version conflict, document already exists (current version [3])", "index_uuid": "IYbj0OLGQHmMUpLfbhD4Hw", "shard": "3", "index": "fs" } ], "type": "version_conflict_engine_exception", "reason": "[lock][1]: version conflict, document already exists (current version [3])", "index_uuid": "IYbj0OLGQHmMUpLfbhD4Hw", "shard": "3", "index": "fs" }, "status": 409 } 如果已經有人上了共享鎖,明顯/fs/lock/1是存在的,create語法去上排他鎖,肯定會報錯 3、對共享鎖進行解鎖 POST /fs/lock/1/_update { "script": { "lang": "groovy", "file": "unlock-shared" } } 連續解鎖3次,此時共享鎖就徹底沒了 每次解鎖一個共享鎖,就對lock_count先減1,如果減了1之后,是0,那么說明所有的共享鎖都解鎖完了,此時就就將/fs/lock/1刪除,就徹底解鎖所有的共享鎖 3、上排他鎖,再上排他鎖 PUT /fs/lock/1/_create { "lock_type": "exclusive" } 其他線程 PUT /fs/lock/1/_create { "lock_type": "exclusive" } { "error": { "root_cause": [ { "type": "version_conflict_engine_exception", "reason": "[lock][1]: version conflict, document already exists (current version [7])", "index_uuid": "IYbj0OLGQHmMUpLfbhD4Hw", "shard": "3", "index": "fs" } ], "type": "version_conflict_engine_exception", "reason": "[lock][1]: version conflict, document already exists (current version [7])", "index_uuid": "IYbj0OLGQHmMUpLfbhD4Hw", "shard": "3", "index": "fs" }, "status": 409 } 4、上排他鎖,上共享鎖 POST /fs/lock/1/_update { "upsert": { "lock_type": "shared", "lock_count": 1 }, "script": { "lang": "groovy", "file": "judge-lock-2" } } { "error": { "root_cause": [ { "type": "remote_transport_exception", "reason": "[4onsTYV][127.0.0.1:9300][indices:data/write/update[s]]" } ], "type": "illegal_argument_exception", "reason": "failed to execute script", "caused_by": { "type": "script_exception", "reason": "error evaluating judge-lock-2", "caused_by": { "type": "power_assertion_error", "reason": "assert false\n" }, "script_stack": [], "script": "", "lang": "groovy" } }, "status": 400 } 5、解鎖排他鎖 DELETE /fs/lock/1
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看