1
0
Fork 0
cpu_ctrl/producer/cpu_temp_queue.go

37 lines
742 B
Go
Raw Normal View History

2018-07-06 01:42:09 +09:00
package producer
import (
"container/list"
)
// 블럭되지 않는 큐체널
func NewTempetureQueue() (chan<- TempetureInfo, <-chan TempetureInfo) {
send := make(chan TempetureInfo, 1)
receive := make(chan TempetureInfo, 1)
go manageTempetureQueue(send, receive)
return send, receive
}
func manageTempetureQueue(send <-chan TempetureInfo, receive chan<- TempetureInfo) {
queue := list.New()
defer close(receive)
for {
if front := queue.Front(); front == nil {
if value, ok := <-send; ok {
queue.PushBack(value)
} else {
break
}
} else {
select {
case receive <- front.Value.(TempetureInfo):
queue.Remove(front)
case value, ok := <-send:
if ok {
queue.PushBack(value)
}
}
}
}
}