GoLang并发编程3

并发编程有两个模式

  • 共享内存
  • 消息

共享内存,以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
    } 
  }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,912评论 1 32
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 10,833评论 2 35
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 9,002评论 0 5
  • 1.你认为微笑曲线还有现实意义吗?为什么?互联网环境下会产生哪些改变? 有现实意义,以“微笑曲线”为表现形式的价值...
    deaa52bc899a阅读 1,639评论 1 2
  • 不知道能不能看出老上海style风 献给潘潘 希望喜欢 唐将军: 谢谢您的来信,我确实有点吓到了,不知道您是怎么...
    泡面味也也阅读 14,430评论 3 4

友情链接更多精彩内容