Go语言实现互斥锁、随机数、time、List
作者:ck_god 发布时间:2024-04-25 15:11:24
标签:Go语言,互斥锁
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


猜你喜欢
- 前言在程序中我们经常可以看到有很多的加密算法,比如说MD5 sha1等,今天我们就来了解下这下加密算法的吧,在了解之前我们需要知道一个模块嘛
- 使用python画图,发现生成的图片在console里。不仅感觉很别扭,很多功能也没法实现(比如希望在一幅图里画两条曲线)。想像matlab
- 1:masterha_check_repl 副本集方面报错 replicates is not defined in
- 先来说一下我们学校的网站:http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html查询成绩需要登
- view.pyfrom django.views.generic import ListView,DetailViewfrom xxxx.m
- 遍历pd.Series的index和value的方法如下,python built-in list的enumerate方法不管用for i,
- 前言sys模块是与python解释器交互的一个接口。sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分。处理命令行参
- 这篇文章主要介绍了Django rstful登陆认证并检查session是否过期代码实例,下面我们可以来一起学习一下。一:restful用户
- 正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)是计算机科学的一个概念。正则表达式使用单个
- ASP具备动态输出任一Office应用程序文件格式的功能。在开始编写代码之前,我们首先需要做的就是设置正确的文件类型,因为浏览器需要知道如何
- 在我们看一些使用反射的代码的时候,会发现,reflect.ValueOf 或 reflect.TypeOf 的参数有些地方使用的是指针参数,
- 遇到了这个问题,意思是你的 CPU 支持AVX AVX2 (可以加速CPU计算),但你安装的 TensorFlow 版本不支持解决:1. 如
- <?php $fp = fopen("http://www.***.com/**
- load与loads简介:在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是s
- mysql> create table jackbillow (ip int unsigned, name char(1)); Que
- Python 语言的优势在于其功能强大,可以用于网络数据采集、数据分析等各种应用场景。本篇文章将介绍如何使用 Python 获取网络数据、使
- nodejieba 简介随着汉语言的广泛应用,中文信息处理成了一个重要的研究课题,常见于搜索引擎:信息检索、中外文自动翻译、数据挖掘技术、自
- 这个绝对是IE6的bug。我想要达到的是如下的效果。通过三个div,排布好侧栏和内容区。我用了如下的css:<style type=&
- 在浏览器 IE6 、IE7、Firefox2+、Firefpx3+、Opera9.6+、Safari3.1+中测试以下代码:<!DOC
- php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用