Is there a synchronization class that guarantee FIFO order in C#?

前端 未结 7 1610
无人共我
无人共我 2020-11-28 11:01

What is it and how to use?

I need that as I have a timer that inserts into DB every second, and I have a shared resource between timer handler and the main thread. I

7条回答
  •  北荒
    北荒 (楼主)
    2020-11-28 11:20

    In case anyone needs Matt's solution in F#

        type internal QueuedLock() =
            let innerLock = Object()
            let ticketsCount = ref 0
            let ticketToRide = ref 1
            member __.Enter () =
                let myTicket = Interlocked.Increment ticketsCount
                Monitor.Enter innerLock
                while myTicket <> Volatile.Read ticketToRide do
                    Monitor.Wait innerLock |> ignore
            member __.Exit () =
                Interlocked.Increment ticketToRide |> ignore
                Monitor.PulseAll innerLock
                Monitor.Exit innerLock
    

提交回复
热议问题