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

2014年4月26日 星期六

上帝粒子---希格斯玻色子

        牛頓力學成功地解釋我們生活中周遭的大小事物,舉凡行星、火箭到我們生活中經驗的慣性原理,無一不在牛頓三大運動定律的囊括範圍裡。而其中,又以我們從國中就開始熟知的物體受力與其加速度的關係最具代表性,並且簡潔清楚的方程式表達成 F=ma,在這裡,F代表的是物體所受的合力,m為質量,a為加速度。在我們處理的問題中,物體的質量往往是已知的,我們毫無疑問的使用這個參數。然而,對科學家而言,卻不禁要問質量從何而來呢為什麼會有質量

        
這個問題,實際上應起源於解釋現今大小物質的基本粒子及三種基本力(強力、電磁力及弱力)的理論-標準模型中。在標準模型中,我們區分基本粒子為費米子及玻色子。而費米子就是組成物質的粒子,玻色子則負責傳遞各種作用力。回到原問題,事實上,質量來自許多不同的機制。物理學家已建構了關於質量的初步理論,理論中的關鍵,它是一種遍布於宇宙各角落的場,稱為希格斯場。而基本粒子就是透過與希格斯場的交互作用而擁有質量。打個比方,充滿希格斯場的空間,就好像充滿小孩子的海灘,通過這個區域的一個粒子,就好像來了一個冰淇淋小販….,有趣的事發生了因為孩子們會擁上和他互動,所以他的移動就會慢下來,就好像獲得了質量一樣。而所謂的希格斯玻色子即為希格斯場的振動。這就好像我們認知中電磁場量子化後成為光子,用以解釋光電效應和黑體輻射等。

        在我們知道了什麼是希格斯玻色子後,接著,下一個問題是實際上,希格斯粒子存不存在呢?這是一個極為重要的基礎物理問題。物理學者花費四十多年時間尋找它。至今為止,全世界最昂貴、最複雜的實驗設施之一,大型強子對撞機(LHC),其建成的主要目的之一就是尋找與觀察希格斯玻色子與其它基本粒子。時至今日,歐洲核子研究組織,暫時確認存在具有部分性質的希格斯玻色子。而首先提出希格斯場理論的彼得.希格斯,因為解釋次原子粒子質量的生成機制,促進了人類對這方面的理解,在2013年獲得諾貝爾物理獎。

   最後,假使人類真的完整理解了質量的起源,它會有哪些影響呢?顯而易見的,透過希格斯機制,人類可以自行製造質量,有如上帝創生行星、恆星一般,這也是為什麼希格斯粒子稱為上帝粒子的原因。屆時也許能製造個適合人類居住的星球也說不定。當然,根據愛因斯坦的質能方程式,首要的條件,應是找尋並利用現存在宇宙中的其他能源,以供應產生製造質量的可能。再者,人類本身也具有質量。因此,如果能夠配合利用現今的生物複製技術的話,現在科幻電影所常見的量子傳輸或許也將能夠實現。