1. 程式人生 > >使用讀寫鎖來保證資料安全

使用讀寫鎖來保證資料安全






package initialization


import (


   "time"
   "github.com/gin-gonic/gin"
   "monitor/server/dingding"
   "monitor/server/email"
   "sync"
)


type  RLMap struct{
   Data map[string]time.Time
   sync.RWMutex
}


func (s *RLMap) Set(k string, v time.Time){
   s.Lock()
   s.Data[k] = v
   s.Unlock()
}
func (s *RLMap) Get(k string)(v time.Time, ok bool){
   s.RLock()
   defer s.RUnlock()
   v,ok = s.Data[k]
   return v, ok
}
func (s *RLMap)del(k string)  {
   s.Lock()
   delete(s.Data,k)
   s.Unlock()
}


var    Listenmap = new(RLMap)
var Problemlist = new(RLMap)


//func random() (res string){
// str := "0123456789"
// bytes := []byte(str)
// result := []byte{}
// r := rand.New(rand.NewSource(time.Now().UnixNano()))
// for i := 0; i < 10; i++ {
//    result = append(result, bytes[r.Intn(len(bytes))])
// }
// res = string(result)
// return res
//}


func Heartbeat(c *gin.Context){
   //fmt.Println(c.Request.Header)//map[User-Agent:[Go-http-client/1.1] Accept-Encoding:[gzip]]
   //fmt.Println(c.Request.URL.Path)// /
   //fmt.Println(c.Request.RemoteAddr)//127.0.0.1:50757
   //fmt.Println(c.Request.RequestURI)///?ID=1
   //fmt.Println(c.Request.Host)//127.0.0.1:8888
   //fmt.Println(c.Request.Body)//{}


   ID := c.Query("ID")
   Listenmap.Set(ID, time.Now())
    _,ok := Problemlist.Get(ID)


   if ok {
      Problemlist.del(ID)
      dingding.Dingding(ID + "服務已恢復")
      email.Email(ID + "服務已恢復")
   }


}




func SeriousError(c *gin.Context){
   ID := c.PostForm("ID")
   msg := c.PostForm("msg")
   dingding.Dingding(ID + msg)
   email.Email(ID + msg)
}

相關推薦

使用保證資料安全

package initializationimport (   "time"   "github.com/gin-gonic/gin"   "monitor/server/dingding"   "monitor/server/email"   "sync")type  R

linux下用互斥和條件變數實現

以下內容來源自UNP卷二的第八章 讀寫鎖的概念( the conception of read-write lock ) (1)只要沒有執行緒持有某個給定的讀寫鎖用於寫,那麼任意數目的執行緒可以持有該執行緒用於讀 (2)僅當沒有執行緒持有某個給定的讀寫鎖用於讀或用於寫,才能分配該

的優化 ReentrantReadWriteLock(資料共享通道:BlockingQueue

在併發的程式應用中,鎖的競爭必然導致程式的效能下降。為了將這種副作用降到最低,下面提出一些建議可以幫助大家寫出效能更加優越的程式。 減少鎖持有的時間   對於使用鎖進行併發控制的應用程式而言,在鎖競爭的過程中,單個執行緒對鎖的持有時間與系統性能有著直接的關係。如果執行緒持有鎖的時間很長,那麼相對的,鎖的競

/同步資料存取

讀/寫鎖同步資料存取 準備工作 工作原理 更多關注 ReadWriteLock介面和實現此介面的ReentrantReadWriteLock特殊類是鎖機制提供的最顯著改進之一。此類包含兩種鎖:一種是讀取操作鎖,一種是寫入操作鎖。多個執行緒能夠同

基本執行緒同步(六)使用/同步資料訪問

宣告:本文是《 Java 7 Concurrency Cookbook 》的第二章,作者: Javier Fernández González     譯者:許巧輝 使用讀/寫鎖同步資料訪問 鎖所提供的最重要的改進之一就是ReadWriteLock介面和唯一 一個實現它的ReentrantRe

Linux多執行緒學習(4) --和其他型別的以及執行緒安全

多執行緒學習總結(1):https://blog.csdn.net/hansionz/article/details/84665815 多執行緒學習總結(2):https://blog.csdn.net/hansionz/article/details/84675536 多執行緒學習總結

多執行緒資料方法之方法與shared_ptr+互斥方法的比較

對共享資源進行多執行緒讀寫操作有很多方法,本文舉出兩種方法並進行對比。 一:讀寫鎖方法。執行緒進行讀操作時以讀的方式加鎖,執行緒進行寫操作時用寫的方式加鎖。 二:另外一種比較新奇的方法是使用shared_ptr+互斥鎖。shared_ptr是一種用引用計數實現的智慧指標,當

從火車站車次公示欄學Java

Java多執行緒併發之讀寫鎖 本文主要內容:讀寫鎖的理論;通過生活中例子來理解讀寫鎖;讀寫鎖的程式碼演示;讀寫鎖總結。通過理論(總結)-例子-程式碼-然後再次總結,這四個步驟來讓大家對讀寫鎖的深刻理解。 本篇是《凱哥(凱哥Java:kagejava)併發程式設計學習》系列之《Lock系列》教程的第七篇:《Ja

22、Java並發性和多線程-Java中的/

權限 原理 目的 str sco readers 閱讀 操作 wait 以下內容轉自http://ifeve.com/read-write-locks/: 相比Java中的鎖(Locks in Java)裏Lock實現,讀寫鎖更復雜一些。假設你的程序中涉及到對一些共享資源

自旋和順序的實現原理

並且 保護 表達 min 返回 create creat rwlock ini 常用的同步原語鎖,到多核處理器時代鎖已經是必不可少的同步方式之一了。無論設計多優秀的多線程數據結構,都避不開有競爭的臨界區,此時高效的鎖顯得至關重要。鎖的顆粒度是框架/程序設計者所關註的,

多線程面試題系列(14):讀者者問題繼 SRWLock

線程面試題 oid out 讀者寫者問題 五個 lock val ref win7 在第十一篇文章中我們使用事件和一個記錄讀者個數的變量來解決讀者寫者問題。問題雖然得到了解決,但代碼有點復雜。本篇將介紹一種新方法——讀寫鎖SRWLock來解決這一問題。讀寫鎖在對資源進行保

javaReadWriteLock

blog ner java readwrite pan exce oid rate this package com.java.concurrent; import java.util.concurrent.locks.ReadWriteLock; import jav

線程同步之操作的補充)

允許 資源 加鎖 函數 申請 tex bject def 讀取 輕量級的讀寫鎖(Slim Reader-Writer locks):讀寫鎖實際是一種特殊的自旋鎖,它把對共享資源的訪問者劃分成讀者和寫者,讀者只對共享資源進行讀訪問,寫者則需要對共享資源進行寫操作。這種鎖相對於

、自旋

adr 一個 失敗 基本 獲得 圖書館 不能 color pre 概述:   在一些程序中存在讀者寫者問題,也就是說,對某些資源的訪問會 存在兩種可能的情況,一種是訪問必須是排它行的,就是獨占的意思,這稱作寫操作; 另一種情況就是訪問方式可以是共享的,就是說可以有多個線程

style 規則 讀寫 由於 readwrite 減少 jdk1 多個 idt 讀寫鎖介紹:讀寫分離鎖ReadWriteLock是JDK1.5提供的,可以有效的減少鎖競爭,以提高系統性能 讀寫鎖的必要性:由於讀操作不會對數據的完整性造成破壞,所以多個線程讀操作不需要鎖制約,

Java通過模擬緩存池

runnable 一個 nbsp 今天 ted pub 項目 時長 讀寫鎖 緩存池在項目開發中時長用到,在查看了一下相關的資料,發現很多博客中對緩存池的實現有存在著一些漏洞,今天花了點時間梳理一下,用JDK1.5中並發包中的ReentrantReadWriteLock實現

多線程編程之

|| 概念 release 線程編程 相關 修改 reader lin 實現   在《多線程編程之Linux環境下的多線程(二)》一文中提到了Linux環境下的多線程同步機制之一的讀寫鎖。本文再詳細寫一下讀寫鎖的概念和原理。 一、什麽是讀寫鎖   讀寫鎖(也叫共享-獨占鎖)

高並發編程-09-ReentrantReadWriteLock

案例 https order span app ant shu 概念 border 1,讀寫鎖的概念我們之前講的鎖是排他鎖或叫互斥鎖而我們今天要講的ReentrantReadWriteLock讀寫鎖兼顧了排他鎖和共享鎖的特性,對於讀的操作采用的是共享鎖,而寫的操作采用的是排

WINDOWS 同步(Interlocked,InterlockedExchangeAdd,Slim/,WaitForSingleObject,CreateWaitableTimer等等)

延遲 align .net 屬於 替代 技巧 led 存在 resume NOTE0 在以下兩種基本情況下,線程之間需要相互通信: 需要讓多個線程同時訪問一個共享資源,同時不能破壞資源的完整性; 一個線程需要通知其它線程某項任務已經完成 1.原子訪問:Int

Linux:使用使線程同步

解釋 -s write des 返回值 沒有 enter red bubuko 基礎與控制原語 讀寫鎖 與互斥量類似,但讀寫鎖允許更高的並行性。其特性為:寫獨占,讀共享。 讀寫鎖狀態: 一把讀寫鎖具備三種狀態: 1. 讀模式下加鎖狀態 (讀鎖)