Go语言实现互斥锁、随机数、time、List
作者:ck_god 时间:2024-04-25 15:11:24
Go语言实现互斥锁、随机数、time、List
import (
"container/list"
"fmt"
"math/rand" //备注2:随机数的包
"sync" //备注1:异步任务的包
"time"
)
type INFO struct {
lock sync.Mutex //备注1:异步锁
Name string
Time int64
}
var List *list.List = list.New() //备注3:初始化List变量
func main() {
var Info INFO
go func() {
for i := 0; i < 5; i++ {
time.Sleep(time.Duration(1e9 * int64(rand.Intn(5))))//备注2:随机数rand.Intn(5)<---> 1e9为科学计数法,1 * 10的9次方
Info.lock.Lock()//备注1:上锁
Info.Name = fmt.Sprint("Name", i) //备注: Sprint采用默认格式将其参数格式化,串联所有输出生成并返回一个字符串。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格
Info.Time = time.Now().Unix() + 3
Info.lock.Unlock()//备注1:解锁
List.PushBack(Info)//备注3:List表达式调用
}
}()
go Getgoods()
select {}
}
func Getgoods() {
for {
time.Sleep(1e8)
for List.Len() > 0 {//备注3:List对象的使用
N, T := List.Remove(List.Front()).(INFO).name() //备注3:List对象的使用和value.(type)的妙用
now := time.Now().Unix() //备注4:获取当前日期转换后的时间戳
if T-now <= 0 {
fmt.Println(N, T, now)
continue
}
time.Sleep(time.Duration((T - now) * 1e9))
fmt.Println(N, T, now)
}
}
}
func (i INFO) name() (string, int64) {
return i.Name, i.Time
}
再给大家分享一个互斥锁的实例代码
package main
import (
"fmt"
"runtime"
"sync"
)
var (
counter int
wg sync.WaitGroup
mutex sync.Mutex
)
func main() {
wg.Add(2)
fmt.Println("Create Goroutines")
go incCounter(1)
go incCounter(2)
fmt.Println("Waiting To Finish")
wg.Wait()
fmt.Println("Final Counter:", counter)
}
func incCounter(id int) {
defer wg.Done()
for count := 0; count < 2; count++ {
mutex.Lock()
{
value := counter
runtime.Gosched()
value++
counter = value
}
mutex.Unlock()
}
}
来源:http://blog.51cto.com/13914991/2294034
标签:Go语言,互斥锁
0
投稿
猜你喜欢
ASP实现文件直接下载的代码
2011-04-11 10:56:00
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2023-09-20 17:59:32
初衷和结果
2009-02-23 12:52:00
Python使用内置json模块解析json格式数据的方法
2023-07-30 14:10:45
Python基于Django实现验证码登录功能
2023-06-25 03:21:13
python禁用键鼠与提权代码实例
2022-12-11 11:54:59
使用 django orm 写 exists 条件过滤实例
2022-01-20 02:42:48
教你快速实现 MySQL查询结果的分页显示
2008-11-27 16:17:00
Thinkphp5.0 框架的请求方式与响应方式分析
2023-11-15 00:07:09
基于python实现蓝牙通信代码实例
2021-08-20 07:54:06
MySql数据库之alter表的SQL语句集合
2024-01-21 05:31:24
基于Python制作一个文件解压缩工具
2021-01-10 08:00:13
Python 中 -m 的典型用法、原理解析与发展演变
2023-07-09 17:11:40
vue中Npm run build 根据环境传递参数方法来打包不同域名
2024-04-27 16:17:22
Python 代码实现列表的最小公倍数
2021-08-11 05:15:24
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2022-01-10 00:11:57
python使用多线程不断刷新网页的方法
2022-10-03 09:19:26
Python基础学习之函数和代码复用详解
2022-11-17 13:05:38
python 爬取腾讯视频评论的实现步骤
2021-06-19 03:57:58
没编程基础可以学python吗
2023-11-27 23:12:49