[LTM] Chương 6.7 : Manage threads (Quản lý luồng)


Synchronization - Introduction
MultiThreads:
Các tuyến đoạn có thể truy xuất tới tài nguyên dùng chung để cùng làm việc hợp tác với nhau.
Nảy sinh vấn đề gì?
Example:
Consider a simple class called Counter

 Example, expl: 
The single expression c++ can be
  • Retrieve the current value of c.
  • Increment the retrieved value by 1.
  • Store the incremented value back in c.
Ex, Thread A invokes increment at about the same time Thread B invokes decrement. If the initial value of c is 0, 
  • Thread A: Retrieve c.
  • Thread B: Retrieve c.
  • Thread A: Increment retrieved value; result is 1.
  • Thread B: Decrement retrieved value; result is -1.
  • Thread A: Store result in c; c is now 1.
  • Thread B: Store result in c; c is now -1.

Synchronization

Khi làm việc với nhiều Thread, có thể có một số Thread muốn sử dụng cùng tài nguyên tại cùng 1 time.
Khi hai tuyến đoạn cần sử dụng cùng một đối tượng, có một khả năng có các thao tác đan xen nhau làm phá hỏng dữ liệu => Race condition. ex,
Cần phải có sự đồng bộ - Synchronization.exp,
Tại một time t chỉ có 1 thread sử dụng tài nguyên.
Monitor: Chỉ có 1 Thread có được monitor tại 1 time. Các Thread khác muốn có được monitor phải chờ đợi.

Method synchronized() 

Sử dụng phương thức chiếm dụng đối tượng:
 Nếu một đối tượng bị phong tỏa (used) bởi một tuyến đoạn nào đó thì chỉ có tuyến đoạn đó mới được truy cập tới đối tượng.
Nếu một tuyến đoạn kích hoạt một phương thức synchronized trên một đối tượng, đối tượng đó sẽ bị chiếm dụng bởi tuyến đoạn kích hoạt.
Khi đối tượng được giải phóng, một tuyến đoạn khác mới được kích hoạt synchronized trên cùng đối tượng
synchronized(Obj);
Note that constructors cannot be synchronized 

Ex: test with syn and unsyn



Lệnh synchronized

Lệnh synchronized cho phép đồng bộ hóa một đối tượng thay cho phương thức synchronized
Cú pháp 
synchronized (expr) 
  { //code will execute in one thread at //a time and someObject will be locked.
}

Lệnh synchronized, ex