25

I have been trying to learn design patterns. This site uses the synchronized keyword, but I don't understand what it does.

I searched on the net and found that it is somewhat related to multi-threading and memory, but I am a mechanical engineer and don't understand what that means.

Can anybody please help me understand threads and the synchronized keyword?

Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
Cool_Coder
  • 4,888
  • 16
  • 57
  • 99

3 Answers3

23

There is no synchronized keyword in C++.

There is one in Java, though, where for methods it means the following two things:

  • It is not possible for two invocations of synchronized methods on the same object to interleave. When one thread is executing a synchronized method for an object, all other threads that invoke synchronized methods for the same object block (suspend execution) until the first thread is done with the object.
  • When a synchronized method exits, it automatically establishes a happens-before relationship with any subsequent invocation of a synchronized method for the same object. This guarantees that changes to the state of the object are visible to all threads.

Similar rules apply to arbitrary blocks.

Also, I recommend learning from a peer-reviewed book, not some arbitrary non-authoritative website.

Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
21

In the (Java) example

public static synchronized Singleton getInstance()

means that only one thread at a time should be able to access the getInstance() method this to avoid a racing condition.

AndersK
  • 35,813
  • 6
  • 60
  • 86
7

As the commenters already pointed out, synchronized is a Java keyword.

It means that two threads cannot execute the method at the same time and the JVM takes care of enforcing that.

In C++, you will have to use some synchronization construct, like a critical section or a mutex. You can consult this.

PRouleau
  • 542
  • 4
  • 12