Understanding the Concept of Volatile Variables in Multithreading

Slide Note
Embed
Share

In computer programming, volatile variables play a crucial role in multithreading scenarios. They ensure that changes made by one thread are visible to other threads by bypassing caching mechanisms. This article explores the significance of volatile variables and their use cases in Java and C, shedding light on thread synchronization and memory consistency issues.


Uploaded on Sep 22, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. SE3910 Week 6, Class 1 Week 6, Class 2 (Wednesday) Quiz to be graded still Week 7, Class 2 (Wednesday) Half-Exam 2 Bring Calculator!! Qt and Java: Multithreading SE-2811 1 Slide design: Dr. Mark L. Hornick Content: Dr. Hornick Errors: Dr. Yoder

  2. Multi-core programming SE-2811 Dr.Yoder 2

  3. Volatile SE-2811 3 http://www.brandsoasis.com/bo3/en/volatile Content: Dr. Hornick Errors: Dr. Yoder Slide design: Dr. Mark L. Hornick

  4. Volatile readily vaporizable at a relatively low temperature flying or having the power to fly lighthearted, lively tending to erupt into violence : explosive unable to hold the attention fixed because of an inherent lightness or fickleness of disposition difficult to capture or hold permanently http://www.stormthetest.com/word-of-the-day- SE-2811 Dr.Yoder 4

  5. Based on these definitions, which do you think is a closer fit for volatile? A variable which is cached at any time, value could be incorrect because other threads change it. A variable which is not cached. Must always go to main memory to read value, because other threads may change it at any time. Note: I am NOT asking which is volatile in Java or other languages. SE-2811 Dr.Yoder 5

  6. Volatile (in Java) A variable which is not cached. Must always go to main memory to read or write the value Why might these variables be called volatile? Why might we want a volatile variable? SE-2811 Dr.Yoder 6

  7. Volatile (in C) https://en.wikipedia.org/wiki/Volatile_(comput er_programming)#Optimization_comparison_ in_C SE-2811 Dr.Yoder 7

  8. Task States (more essential rambling) Wiki:Process (computing) See also Laplante and Ovaske 4E p. 97 SE-2811 Dr.Yoder 8

  9. Threading pthreads (review) Java java.lang.Thread No external jar needed link with -pthread Thread t = new Thread(r) t.start(); interface Runnable { void run(); } t.join(); Object o; synchronized(o) { } /* Garbage coll. */ Pthreads #include <pthread.h> pthread_create(t,r,sr,a) Parameter: void* (*sr) (void *) pthread_join(*t, &p) pthread_mutex_init(m,null) pthread_mutex_lock( ) pthread_mutex_destroy( ) 9

  10. Threading pthreads (updated with links) Java Object o; o.notify(); Pthreads phread_cond_t c = PTHREAD_COND_INITIALIZER; pthread_cond_broadcast(c); pthread_cond_wait(c,m); phtread_cond_signal(c); phtread_cond_broadcast(c); o.wait(); o.notify(); o.notifyAll(); See Java coding example NotifyWaitExample Caveat: POSIX threads can wait at condition variables of a greater generality than available in Java, but the corresponding queues may be leaky. http://wimhesselink.nl/pub/whh241b.pdf SE-3910 - Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling 10

  11. Ex: Edit to include notify/wait to interleave these threads. Consider this code- snippet Queue q = synchronized(q) { while(true) { img = getImage(); q.offer(img); } } // on another thread synchronized(q) { while(true) { img = q.poll(); showImage(); } } SE-2811 Dr.Yoder 11

  12. Threading qthreads (with corrections) Java qthreads java.lang.Thread #include <QThread> No external jar needed (moc and friends take care of this) Thread t = new Thread(r) t.start(); interface Runnable { void run(); } QMainWindow)) t.join(); that checks if all threads are done. Object o; QMutex synchronized(o) { } /* Garbage coll. */ ???? QThread *t = new QThread; moveToThread(t); // note here QObject (e.g. QWidget (e.g. connect the QThread::finish() signal to a slot Avoid sharing memory entirely see code example 12

  13. Useful if you are into Qt slots/signals == events A QThread should be used much like a regular thread instance: prepare an object (QObject) class with all your desired functionality in it. Then create a new QThread instance, push the QObject onto it using moveToThread(QThread*) of the QObject instance and call start() on the QThread instance. That s all. https://mayaposch.wordpress.com/2011/11/01/how -to-really-truly-use-qthreads-the-full-explanation/ I have successfully used this approach. SE-2811 Dr.Yoder 13

  14. Qts connect method http://doc.qt.io/qt-5/qobject.html#connect http://doc.qt.io/qt-5/qt.html#ConnectionType- enum SE-2811 Dr.Yoder 14

  15. Qt Connection types http://doc.qt.io/qt-5/qt.html#ConnectionType-enum Constant Value Description (Default) If the receiver lives inthe thread that emits the signal, Qt::DirectConnection is used. Otherwise, Qt::QueuedConnection is used. The connection type is determined when the signal is emitted. Qt::AutoConnection 0 Qt::Direct Connection Qt::Queued Connection Qt::Blocking QueuedConnection3 1 The slot is invoked immediately when the signal is emitted. The slot is executed in the signalling thread. 2 The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed inhe t receiver's thread. Same as Qt::QueuedConnection, except that the signalling thread blocks until the slot returns. This connection must not be used if the receiver lives in the signalling thread, or else the application will deadlock. This is a flag that can be combined with any one of the above connection types, using a bitwise OR. When Qt::UniqueConnection is set,QObject::connect() will fail if the connection already exists (i.e. if the same signal is already connected to the same slot for the same pair of objects). This flag was introduced in Qt 4.6. SE-2811 Dr.Yoder Qt::Unique Connection 0x80 15

  16. Coding example. Exercise: Both the Java and Qt solutions will behave poorly if I start multiple threads. Predict how each solution will behave if I: Click start Click start // what happens? (For Java? For Qt?) Click stop // what happens? (For Java? For Qt?) SE-2811 Dr.Yoder 16

  17. References EB: Derek Malloy, Exploring Beaglebone, Wiley, 2015 SE-2811 17 Slide design: Dr. Mark L. Hornick Content: Dr. Hornick Errors: Dr. Yoder

Related


More Related Content