GoLang并发编程3

同人于野_2068 · · 1091 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

并发编程有两个模式

  • 共享内存
  • 消息

共享内存,以C语言举例

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *count();
// 信号量 互斥锁
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; 
int counter = 0;

main() {
    int rc1, rc2;
    pthread_t thread1, thread2;
  
    /* 创建线程,每个线程独立执行函数functionC */
    if((rc1 = pthread_create(&thread1, NULL, &count, NULL))) {
            printf("Thread creation failed: %d\n", rc1);
    }
    if((rc2 = pthread_create(&thread2, NULL, &count, NULL))) {
            printf("Thread creation failed: %d\n", rc2);
    }
    
    /* 等待所有线程执行完毕 */ 
    pthread_join( thread1, NULL);  
    pthread_join( thread2, NULL);
    exit(0); 
  }

void *count() {
    // 拿到锁
    pthread_mutex_lock( &mutex1 );
    counter++;
    printf("Counter value: %d\n",counter);
    // 释放锁
    pthread_mutex_unlock( &mutex1 );
}

换成 GoLang

  package main
import "fmt" 
import "sync" 
import "runtime"

var counter int = 0

func Count(lock *sync.Mutex) { 
  lock.Lock()
  counter++
  fmt.Println(z)
  lock.Unlock()
}

func main() {
  // 互斥锁
  lock := &sync.Mutex{}
  
  for i := 0; i < 10; i++ {
    go Count(lock)
  }

  for { 
    lock.Lock()
    c := counter
    lock.Unlock()
    runtime.Gosched() 
    if c >= 10 {
      break
    } 
  }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:同人于野_2068

查看原文:GoLang并发编程3

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1091 次点击  
加入收藏 微博
1 回复  |  直到 2019-04-26 19:49:02
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传