<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 進程鎖 - 通過記錄一個PID文件,避免兩個進程同時運行的文件鎖 - 進程鎖的作用之一就是可以協調進程的運行 ### PID文件鎖 - 方便進程向自己發停止或者重啟信號 示例1: Nginx編譯時可指定參數`--pid-path=/var/run/nginx.pid` 進程起來后就會把當前的PID寫入這個文件,當然如果這個文件已經存在了,也就是前一個進程還沒有退出,那么Nginx就不會重新啟動 示例2: 進程管理工具Supervisord也是通過記錄進程的PID來停止或者拉起它監控的進程的 ## 使用進程鎖 - 操作系統默認不會為每個程序創建進程鎖 - 通過文件就可以實現一個進程鎖 - 例如程序開始運行時去檢查一個PID文件,如果文件存在就直接退出,如果文件不存在就創建一個,并把當前進程的PID寫入文件中。這樣我們很容易可以實現讀鎖,但是所有流程都需要自己控制 ### flock接口 - 當然根據DRY(Don't Repeat Yourself)原則,Linux已經為我們提供了flock接口 - Flock提供的是advisory lock,也就是建議性的鎖 go的示例 Go 1.3引入的`FcntlFock()` ``` // Control the lock of file. func fcntlFlock(lockType int16, path ...string) error { var err error if lockType != syscall.F_UNLCK { mode := syscall.O_CREAT | syscall.O_WRONLY lockFile, err = os.OpenFile(path[0], mode, 0666) if err != nil { return err } } lock := syscall.Flock_t{ Start: 0, Len: 1, Type: lockType, Whence: int16(os.SEEK_SET), } return syscall.FcntlFlock(lockFile.Fd(), syscall.F_SETLK, &lock) } // Lock the file. func Flock(path string) error { return fcntlFlock(syscall.F_WRLCK, path) } // Unlock the file. func Funlock(path string) error { err := fcntlFlock(syscall.F_UNLCK) if err != nil { return err } else { return lockFile.Close() } } ```
                  <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>

                              哎呀哎呀视频在线观看