使用自旋算法实现“两个线程轮流打印0到100奇偶数?”

简介: 本次循环不该打印时,让线程代码自旋;等待另外的线程递增而引起本线程再次进入业务代码。

本次循环不该打印时,让线程代码自旋;等待另外的线程递增而引起本线程再次进入业务代码。


volatile static int i = 0;
public static void Main(String[] args)
        {
            Thread thread1 = new Thread(() =>
            {
                while (i <= 100)
                {
                    if (i % 2 == 0)
                    {
                        Console.WriteLine(i + "== 偶数");
                        i++;
                    }
                }
            });
            Thread thread2 = new Thread(() =>
            {
                while (i <= 100)
                {
                    if (i % 2 ==1  )
                    {
                        Console.WriteLine(i + "== 奇数");
                        i++;
                    }
                }
            });
            thread1.Start();
            thread2.Start();
            Console.ReadKey();
        }


翻译成golang


因为go不支持while 和do-while语法,可以通过for关键字来实现:


即break在业务代码执行前相当与while,break在业务代码执行后相当do...while。


package main
import (
 "fmt"
 "strconv"
 "sync"
)
var wg sync.WaitGroup
var i int = 0
func main() {
 wg.Add(2)
 go func() {
  defer wg.Done()
  for {
   if i > 100 {
    break
   }
   if i%2 == 0 {
    fmt.Println("g0:  " + strconv.Itoa(i))
    i++
   }
  }
 }()
 go func() {
  defer wg.Done()
  for {
   if i > 100 {
    break
   }
   if i%2 == 1 {
    fmt.Println("g1: " + strconv.Itoa(i))
    i++
   }
  }
 }()
 wg.Wait()
}
相关文章
|
4月前
|
算法 安全 Java
Java多线程基础-12:详解CAS算法
CAS(Compare and Swap)算法是一种无锁同步原语,用于在多线程环境中更新内存位置的值。
46 0
|
算法 Java Linux
Java线程常用定时任务算法与应用
Java线程常用定时任务算法与应用
104 0
|
4月前
|
算法 安全
AtomicInteger使用非阻塞算法,实现并发控制多线程实现售票
AtomicInteger使用非阻塞算法,实现并发控制多线程实现售票
|
4月前
|
设计模式 缓存 算法
史上最全Java面试题:数据结构+算法+JVM+线程+finalize+GC
基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制
【多线程】两个线程轮流打印数字1-100,一个打奇数一个打偶数,顺序打印
【多线程】两个线程轮流打印数字1-100,一个打奇数一个打偶数,顺序打印
|
4月前
|
算法 Java 流计算
Java【算法分享 02】道格拉斯-普克 Douglas-Peucker 抽稀算法分析及15w个坐标点抽稀到3.7w耗时从360s+优化到365ms接近1000倍的速度提升(并行流+多线程+泛型)
Java【算法分享 02】道格拉斯-普克 Douglas-Peucker 抽稀算法分析及15w个坐标点抽稀到3.7w耗时从360s+优化到365ms接近1000倍的速度提升(并行流+多线程+泛型)
191 0
|
4月前
线程间通信实例之轮流打印ABC
线程间通信实例之轮流打印ABC
42 0
|
安全 Java
面试热点详解 —— 三个线程轮流打印
面试热点详解 —— 三个线程轮流打印
206 0
leetcode线程题1116——打印零与奇偶数
leetcode线程题1116——打印零与奇偶数