2025年2月14日 星期五

SMASHIN' SCOPE

 SMASHIN’ SCOPE is an acronym, created by Tony Buzan, to assist with memorization:

  • Synesthesia/Sensuality 
  • Movement
  • Association
  • Sexuality
  • Humor
  • Imagination
  • Numbers
  • Symbolism
  • Color
  • Order and/or Sequence
  • Positive Images
  • Exaggeration

2022年3月15日 星期二

thread APIs for C/C++ : Creation & Synchronization

Threads share one address space (that is, they can all examine and modify the same variables). On the other hand, each thread has its own registers and execution stack pointer(執行堆疊), and perhaps private memory.

#include <iostream>

#include <condition_variable> // condition variable 條件變量

#include <thread>

#include <chrono>

 

std::condition_variable cv;

std::mutex cv_m;  // This mutex is used for three purposes:

                              // 1) to synchronize accesses to i

                              // 2) to synchronize accesses to std::cerr

                              // 3) for the condition variable cv

int i = 0;

void waits() //used by t1,t2 & t3

{

    std::unique_lock<std::mutex> lk(cv_m);

    std::cerr << "Waiting... \n";

    cv.wait(lk, []{return i == 1;}); //wait(lock)

    std::cerr << "...finished waiting. i == 1\n";

}

void signals()// used by thread t4

{

    std::this_thread::sleep_for(std::chrono::seconds(5));

    {

        std::lock_guard<std::mutex> lk(cv_m);

        std::cerr << "Notifying...\n";

    }

    cv.notify_all();

 

    std::this_thread::sleep_for(std::chrono::seconds(5));

    {

        std::lock_guard<std::mutex> lk(cv_m);

        i = 1;

        std::cerr << "Notifying again...\n";

    }

    cv.notify_all();

}

 

int main()

{

    std::thread t1(waits), t2(waits), t3(waits), t4(signals);

    t1.join(); 

    t2.join(); 

    t3.join();

    t4.join();

}

/*

Produce results in sequence: 

1.thread t1,t2,t3 are waiting

Waiting...

Waiting...

Waiting...

2. broadcast after 5 s

Notifying...

3. broadcast after another 5 s

Notifying again...

4. thread t1,t2,t3 are unlocked

...finished waiting. i == 1

...finished waiting. i == 1

...finished waiting. i == 1

*/



2021年9月22日 星期三

My second Java Program - multithreading - SLOC=56

package waitNotify;

class Badminton { // 在羽球類別中,設定羽毛球物件的屬性和方法

   private boolean isShooting = false;

   public synchronized void sShuttlecock(int tNo) {

   while (isShooting) {

   try {

   wait();

   } catch (InterruptedException e) {}

   }

   System.out.println("射出第"+tNo+" 顆羽球");

   isShooting = true;

   notify();

   }

   public synchronized void hShuttlecock(int aNo) {

   while (!isShooting) {

   try {

   wait();

   } catch (InterruptedException e) {}

   }

   System.out.println("擊回第"+aNo+" 顆羽球");

   isShooting = false;

   notify();

   }

}

class Shooting implements Runnable{

Badminton shuttlecock;

Shooting (Badminton shuttlecock){

this.shuttlecock = shuttlecock;

}

public void run() {

for (int i = 1; i <= 5; i++) {

shuttlecock.sShuttlecock(i);

}

}

}

class Hit implements Runnable{

Badminton shuttlecock;

Hit (Badminton shuttlecock){

this.shuttlecock = shuttlecock;

}

public void run() {

for (int i = 1; i <= 5; i++) {

shuttlecock.hShuttlecock(i);

}

}

}

public class WaitNotify {

public static void main(String[] args) {

// TODO Auto-generated method stub

Badminton shuttlecock = new Badminton(); 

Thread machine = new Thread(new Shooting(shuttlecock));

Thread hitter = new Thread(new Hit(shuttlecock));

machine.start();

hitter.start();

}

}


2021年8月19日 星期四

My first Java program

package ex01;

import java.util.Scanner;

public class Hello {

      

      public static void main (String[] args) {

            Scanner scn  =  new Scanner(System.in);

            System.out.print("Please enter name:");

            String strName = scn.next(); /* declare a string variable named "strName", use scn.next() method to get what string a user entered, then assign to "strName". */

            System.out.println("Hi !" + strName + ",Welcome to Java world!");

            scn.close();

      }


}


2019年1月6日 星期日

GitHub simple Guide

1. Create a Repository : Click+ , Name & ReadMe

2. Create a Branch : Master & Feature

3. Make and commit changes : ReadMe-Edits & Why Changes

4. Open a Pull Request : Differences

5. Merge your Pull Request : Merge & Delete branch

''Pull Request"

2018年4月24日 星期二

GRE 單字 2018.4.25

1.forbear from laughing out loud 忍住笑出來

2.boorish/rude/impolite behaviour 無禮的行為

3.propitious/favourable/opportune moment/environment 有利的時機/環境

4.contentious/controversial/ambivalent debate 有爭議的辯論

5.emulate/imitate/copy one's success 效法某人的成功

2014年12月26日 星期五

常用一字多義的35個英文動詞

1.go
2.come
3.take
4.give
5.pull
6.push
7. be (present:is/are;past:was/were)

8.run
9.grow
10.bring
11.get
12.put
13.drive
14.make

15.turn
16.keep
17.throw
18.carry
19.help
20. do
21.have

22.break
23.hit
24.cut
25.see
26.know
27.say
28.tell

29.show
30.think
31.feel
32.listen
33.speak
34.read
35.write