1-1 © 2004 JMH Associates. All rights reserved. Windows Application Development Chapter 7 Windows Thread Management.

Slides:



Advertisements
Similar presentations
Process A process is usually defined as an instance of a running program and consists of two components: A kernel object that the operating system uses.
Advertisements

Chapter 3 Process Description and Control
Module R2 CS450. Next Week R1 is due next Friday ▫Bring manuals in a binder - make sure to have a cover page with group number, module, and date. You.
Silberschatz, Galvin and Gagne ©2009Operating System Concepts – 8 th Edition Chapter 4: Threads.
1 3. Controlling Robot Car by Wireless Sensor The ultimate objective of the project is to control the car motion using the steering wheel The only connection.
Process Description and Control
1 JMH Associates © 2004, All rights reserved Chapter 6 Process Management.
Page 1 Processes and Threads Chapter Processes 2.2 Threads 2.3 Interprocess communication 2.4 Classical IPC problems 2.5 Scheduling.
ISP – 3 rd Recitation “The joy of Windows API” Processes Threads Handles Relevant functions A simple code example.
3.5 Interprocess Communication Many operating systems provide mechanisms for interprocess communication (IPC) –Processes must communicate with one another.
3.5 Interprocess Communication
7-1 JMH Associates © 2003, All rights reserved Designing and Developing Reliable, Scaleable Multithreaded Windows Applications Chapter 10 Supplement Advanced.
8-1 JMH Associates © 2004, All rights reserved Windows Application Development Chapter 10 - Supplement Introduction to Pthreads for Application Portability.
ISP – 4 th Recitation Times System Errors Threads Waits Code examples.
 2004 Deitel & Associates, Inc. All rights reserved. Chapter 4 – Thread Concepts Outline 4.1 Introduction 4.2Definition of Thread 4.3Motivation for Threads.
3-1 JMH Associates © 2004, All rights reserved Windows Application Development Chapter 9 Synchronization Performance Impact and Guidelines.
Threads CNS What is a thread?  an independent unit of execution within a process  a "lightweight process"  an independent unit of execution within.
1 JMH Associates © 2004, All rights reserved Chapter 15 Asynchronous Input/Output.
1 Threads Chapter 4 Reading: 4.1,4.4, Process Characteristics l Unit of resource ownership - process is allocated: n a virtual address space to.
Chapter 51 Threads Chapter 5. 2 Process Characteristics  Concept of Process has two facets.  A Process is: A Unit of resource ownership:  a virtual.
CSE 380 – Computer Game Programming Render Threading Portal, by Valve,
Win32 Programming Lesson 9: Jobs & Thread Basics.
Operating Systems Chapter 5 Threads. Benefits Responsiveness Resource Sharing Economy Utilization of MP Architectures.
1 Lecture 4: Threads Operating System Fall Contents Overview: Processes & Threads Benefits of Threads Thread State and Operations User Thread.
MultiThreaded Applications. What is Multithreaded Programming? Having your software appear to perform multiple tasks in parallel –Individual paths of.
Chapter 41 Processes Chapter 4. 2 Processes  Multiprogramming operating systems are built around the concept of process (also called task).  A process.
111 © 2002, Cisco Systems, Inc. All rights reserved.
Lecture 3 Process Concepts. What is a Process? A process is the dynamic execution context of an executing program. Several processes may run concurrently,
 2004 Deitel & Associates, Inc. All rights reserved. 1 Chapter 4 – Thread Concepts Outline 4.1 Introduction 4.2Definition of Thread 4.3Motivation for.
Threads and Thread Synchronization Advanced Windows Programming Series 1.
ITEC 502 컴퓨터 시스템 및 실습 Chapter 2-1: Process Mi-Jung Choi DPNM Lab. Dept. of CSE, POSTECH.
1 Threads Chapter 11 from the book: Inter-process Communications in Linux: The Nooks & Crannies by John Shapley Gray Publisher: Prentice Hall Pub Date:
Threads G.Anuradha (Reference : William Stallings)
Source: Operating System Concepts by Silberschatz, Galvin and Gagne.
Multithreading GSP-420.
Operating System Concepts and Techniques Lecture 4 Thread M. Naghibzadeh Reference M. Naghibzadeh, Operating System Concepts and Techniques, First ed.,
Windows Thread Management
Multithreaded Programing. Outline Overview of threads Threads Multithreaded Models  Many-to-One  One-to-One  Many-to-Many Thread Libraries  Pthread.
Operating Systems: Internals and Design Principles
© Janice Regan, CMPT 300, May CMPT 300 Introduction to Operating Systems Operating Systems Processes and Threads.
Windows CE Portable Modular Real-time Small footprint Embedded market.
Windows Threading Colin Roby Jaewook Kim.
Processes and Threads MICROSOFT.  Process  Process Model  Process Creation  Process Termination  Process States  Implementation of Processes  Thread.
4.1 Introduction to Threads Overview Multithreading Models Thread Libraries Threading Issues Operating System Examples Windows XP Threads Linux Threads.
Operating Systems Unit 2: – Process Context switch Interrupt Interprocess communication – Thread Thread models Operating Systems.
Contents 1.Overview 2.Multithreading Model 3.Thread Libraries 4.Threading Issues 5.Operating-system Example 2 OS Lab Sun Suk Kim.
Threads and Thread Synchronization. Introduction In windows the basic unit of execution is the thread. It is the smallest schedulable unit of execution.
Window Threads Chapter 7 Windows Thread Management.
Chapter 4 – Thread Concepts
Chapter 3: Windows7 Part 5.
Processes and threads.
Process concept.
Chapter 4 – Thread Concepts
Thread Programming.
Threads and Locks.
Chapter 3: Windows7 Part 5.
Process Description and Control
Chapter 05. Multithread.
Process Description and Control
Threads Chapter 4.
Process Description and Control
Windows Development Dynadata Copyright, 2014 © DynaData S.A. 1/49.
Process Description and Control
Process Description and Control
Process Description and Control
Process Description and Control
Chapter 2 Processes and Threads 2.1 Processes 2.2 Threads
26.
Foundations and Definitions
Presentation transcript:

1-1 © 2004 JMH Associates. All rights reserved. Windows Application Development Chapter 7 Windows Thread Management

1-2 © 2004 JMH Associates. All rights reserved. Objectives and Benefits Upon completion of this chapter, you will be able to:  Describe Windows thread management  Use threads in Windows applications  Use threads with C library functions  Build and execute threaded applications  Describe scheduling and SMP operation

1-3 © 2004 JMH Associates. All rights reserved. Threads: Benefits and Risks Benefits  Simpler program models  Faster code – in many cases  Exploit multiple processors  Exploit inherent application parallelism  Reliable, understandable, maintainable code Risks  Slower performance – in some cases  Potential defects

1-4 © 2004 JMH Associates. All rights reserved. ContentsContents 1.Process and Thread Overview 2.Thread Management 3.Waiting for Thread Termination 4.The C Library and Threads 5.Demonstration: Building a Threaded Application 6.Thread Priority, Scheduling, SMP Impact 7.Lab Exercise 7-1

1-5 © 2004 JMH Associates. All rights reserved. 1. Process and Thread Overview Threads in a process share data and code  Each thread has its own stack for function calls  Calling thread can pass an argument to a thread at creation time  This argument is on the stack  Each thread can allocate its own Thread Local Storage (TLS) indices and set TLS values

1-6 © 2004 JMH Associates. All rights reserved. Process and Thread Overview Threads are scheduled and run independently  The executive schedules threads  Threads run asynchronously  Threads can be preempted  Or restarted at any time

1-7 © 2004 JMH Associates. All rights reserved. Processes and Threads Process Code Global Variables Process Heap Process Resources Open Files Heaps … Environment Block... Thread 1 Thread Local Storage Stack Thread N Thread Local Storage Stack

1-8 © 2004 JMH Associates. All rights reserved. Read File B Single-Threaded ProgramMultithreaded Program Read File A Read File B Reading File B before File A would give the same results Read File A Wait for Thread 1 and Thread 2 to finish Merge data from both files Thread 1 Thread 3 Thread 2 Thread 3 Merge data from both files Threads Performing Parallel Tasks

1-9 © 2004 JMH Associates. All rights reserved. 2. Thread Management Creating a Thread The Thread Function Thread Termination Thread Exit Codes Thread Identities Suspending and Resuming Threads

1-10 © 2004 JMH Associates. All rights reserved. Creating a Thread (1 of 6) Specify the thread’s start address within the process’ code Specify the stack size, and the stack consumes space within the process’ address space  The stack cannot be expanded

1-11 © 2004 JMH Associates. All rights reserved. Creating a Thread (2 of 6) Specify a pointer to an argument for the thread  Can be nearly anything  Interpreted by the thread itself CreateThread returns a thread’s ID value and its handle  A NULL handle value indicates failure

1-12 © 2004 JMH Associates. All rights reserved. Creating a Thread (3 of 6) HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpsa, DWORD cbStack, LPTHREAD_START_ROUTINE lpStartAddr, LPVOID lpvThreadParm, DWORD dwCreate, LPDWORD lpIDThread )

1-13 © 2004 JMH Associates. All rights reserved. Creating a Thread (4 of 6) Parameters lpsa  Security attributes structure (use NULL ) cbStack  Byte size for the new thread’s stack  Use 0 to default to the primary thread’s stack size (1 MB)

1-14 © 2004 JMH Associates. All rights reserved. Creating a Thread (5 of 6) lpStartAddr  Points to the function (within the calling process) to be executed  Accepts a single pointer argument and returns a 32-bit DWORD exit code  The thread can interpret the argument as a DWORD or a pointer lpThreadParm  The pointer passed as the thread argument

1-15 © 2004 JMH Associates. All rights reserved. Creating a Thread (6 of 6) dwCreate  If zero, the thread is immediately ready to run  If CREATE_SUSPENDED, the new thread will be in the suspended state, requiring a ResumeThread function call to move the thread to the ready state lpIDThread  Points to a DWORD that receives the new thread’s identifier; NULL OK on W2000/NT

1-16 © 2004 JMH Associates. All rights reserved. The Thread Function DWORD WINAPI MyThreadFunc ( PVOID pThParam ) {... ExitThread (ExitCode); /* OR */ return ExitCode; }

1-17 © 2004 JMH Associates. All rights reserved. Thread Termination (1 of 3) Threads are terminated by ExitProcess  The process and all its threads terminate  The exit code returned by the thread start function same as the process exit code  Or a thread can simply return with its exit code

1-18 © 2004 JMH Associates. All rights reserved. Thread Termination (2 of 3) ExitThread is the preferred technique  The thread’s stack is deallocated on termination VOID ExitThread (DWORD (dwExitCode) When the last thread in a process terminates, so does the process itself

1-19 © 2004 JMH Associates. All rights reserved. Thread Termination (3 of 3) You can terminate a different thread with TerminateThread  Dangerous: The thread’s stack and other resources will not be deallocated  Better to let the thread terminate itself A thread will remain in the system until the last handle to it is closed (using CloseHandle )  Then the thread will be deleted Any other thread can retrieve the exit code

1-20 © 2004 JMH Associates. All rights reserved. Thread Exit Codes BOOL GetExitCodeThread ( HANDLE hThread, LPDWORD lpdwExitCode ) lpdwExitCode  Contains the thread’s exit code  It could be STILL_ACTIVE

1-21 © 2004 JMH Associates. All rights reserved. Thread Identities (1 of 2) A thread has a permanent “ ThreadId ” A thread is usually accessed by HANDLE An ID can be converted to a HANDLE

1-22 © 2004 JMH Associates. All rights reserved. Thread Identities (2 of 2) HANDLE GetCurrentThread (VOID); DWORD GetCurrentThreadId (VOID); HANDLE OpenThread ( DWORD dwDesiredAccess, BOOL InheritableHandle, DWORD ThreadId ); /* >= Windows 2000 only */

1-23 © 2004 JMH Associates. All rights reserved. Suspend & Resume Threads (1 of 2) Every thread has a suspend count  A thread can execute only if this count is zero A thread can be created in the suspended state One thread can increment or decrement the suspend count of another: DWORD ResumeThread (HANDLE hThread)

1-24 © 2004 JMH Associates. All rights reserved. Suspend & Resume Threads (2 of 2) DWORD SuspendThread (HANDLE hThread) Both functions return previous suspend count 0xFFFFFFFF indicates failure Useful in preventing “race conditions”  Do not allow threads to start until initialization is complete Unsafe for general synchronization

1-25 © 2004 JMH Associates. All rights reserved. 3. Waiting for Thread Termination Wait for a thread to terminate using general purpose wait functions WaitForSingleObject or WaitForMultipleObjects  Using thread handles The wait functions wait for the thread handle to become signaled  Thread handle is signaled when thread terminates

1-26 © 2004 JMH Associates. All rights reserved. Waiting for Thread Termination (2 of 2) ExitThread and TerminateThread set the object to the signaled state  Releasing all other threads waiting on the object ExitProcess sets the process’ state and all its threads’ states to signaled

1-27 © 2004 JMH Associates. All rights reserved. The Wait Functions (1 of 2) DWORD WaitForSingleObject ( HANDLE hObject, DWORD dwTimeOut )

1-28 © 2004 JMH Associates. All rights reserved. The Wait Functions (2 of 2) DWORD WaitForMultipleObjects ( DWORD cObjects, LPHANDLE lphObjects, BOOL fWaitAll, DWORD dwTimeOut ) Return: The cause of the wait completion

1-29 © 2004 JMH Associates. All rights reserved. Wait Options (1 of 2) Specify either a single handle hObject Or an array of cObjects referenced by lphObjects cObjects should not exceed MAXIMUM_WAIT_OBJECTS - 64

1-30 © 2004 JMH Associates. All rights reserved. Wait Options (2 of 2) dwTimeOut is in milliseconds  0 means the function returns immediately after testing the state of the specified objects  Use INFINITE for no timeout  Wait forever for a thread to terminate GetExitCodeThread  Returns the thread exit code

1-31 © 2004 JMH Associates. All rights reserved. Wait Function Return Values (1 of 3) fWaitAll  If TRUE, wait for all threads to terminate Possible return values are:  WAIT_OBJECT_0  The thread terminated (if calling WaitForMultipleObjects ; fWaitAll set)

1-32 © 2004 JMH Associates. All rights reserved. Wait Function Return Values (2 of 3)  WAIT_OBJECT_0 + n where 0 <= n < cObjects  Subtract WAIT_OBJECT_0 from the return value to determine which thread terminated when calling WaitForMultipleObjects with fWaitAll set  WAIT_TIMEOUT  Timeout period elapsed

1-33 © 2004 JMH Associates. All rights reserved. Wait Function Return Values (3 of 3)  WAIT_ABANDONED  Not possible with thread handles  WAIT_FAILED  Call GetLastError for thread-specific error code

1-34 © 2004 JMH Associates. All rights reserved. 4. The C Library and Threads Nearly all programs (and thread functions) use the C library But the normal C library is not “thread safe” The C function _beginthreadex has exactly the same parameters as CreateThread

1-35 © 2004 JMH Associates. All rights reserved. Using _beginthreadex (1 of 3) Cast the _beginthreadex return value to (HANDLE) Use _endthreadex in place of ExitThread #include

1-36 © 2004 JMH Associates. All rights reserved. Using _beginthreadex (2 of 3) Set the multithreaded environment as follows:  #define _MT in every source file before  Link with LIBCMT.LIB  Override the default library

1-37 © 2004 JMH Associates. All rights reserved. Using _beginthreadex (3 of 3) Preferred method using Visual C++ From the menu bar:  Build Settings — C/C++ Tab  Code Generation category  Select a multithreaded run-time library

1-38 © 2004 JMH Associates. All rights reserved. Ex: A Simple Boss Thread HANDLE hWork[K]; volatile LONGLONG WorkDone[K], iTh; /* !! */... for (iTh = 0; iTh < K; iTh++) { WorkDone[ith] = 0; hWork[iTh] = _beginthreadex (NULL, 0, WorkTh, (PVOID)&iTh, 0, NULL); /* BUG! */ } WaitForMultipleObjects (K, hWork, TRUE, INFINITE); for (iTh = 0; iTh < K; iTh++) printf (“Thread %d did %d workunits\n”, iTh, WorkDone[iTh]);

1-39 © 2004 JMH Associates. All rights reserved. Ex: A Simple Worker Thread DWORD WINAPI WorkTh (PVOID pThNum) { DWORD ThNum = (DWORD)(*pThNum); while (...) { /* Perform work */ WorkDone[ThNum]++; } _endthreadex (0); }

1-40 © 2004 JMH Associates. All rights reserved. 5. Demonstration: Building a Threaded Application Using Visual C++ Ver. 6.0, 7.0

1-41 © 2004 JMH Associates. All rights reserved. Demonstration (1 of 2) Implement multithreaded word count program wcMT  Include the source code of wc with your application and execute it as a thread  Create one thread for each file to analyze  Compare performance of single process, multi- ple process, & multiple thread implementations  If you use other libraries, build thread-safe versions now!

1-42 © 2004 JMH Associates. All rights reserved. Demonstration (2 of 2) THIS IS A BOSS/WORKER SYSTEM  Shows common thread management techniques  See picture on the next overhead CHALLENGE:  Also try at wcMTx.c and wcMTxx.c  These contains some common bugs  What are the bug symptoms?

1-43 © 2004 JMH Associates. All rights reserved. Boss/Worker Model for wcMT ProgramResources Files Workers Thread K Thread 1 Thread 0 main () Boss

1-44 © 2004 JMH Associates. All rights reserved. 6.Thread Priority and Scheduling Windows kernels run the highest-priority thread that is ready for execution 4 priority classes set by CreateProcess  IDLE_PRIORITY_CLASS (base priority 4)  NORMAL_PRIORITY_CLASS (9 or 7)  HIGH_PRIORITY_CLASS (13)  REALTIME_PRIORITY_CLASS (24) Windows XP extensions

1-45 © 2004 JMH Associates. All rights reserved. Thread Priority (1 of 2) Change or determine a thread’s priority  For itself  For another process, security permitting DWORD SetPriorityClass ( HANDLE hProcess, DWORD dwPriority) DWORD GetPriorityClass ( HANDLE hProcess)

1-46 © 2004 JMH Associates. All rights reserved. Thread Priority (2 of 2) Thread priorities set relative to base priority  THREAD_PRIORITY_LOWEST  THREAD_PRIORITY_BELOW_NORMAL  THREAD_PRIORITY_NORMAL  THREAD_PRIORITY_ABOVE_NORMAL  THREAD_PRIORITY_HIGHEST

1-47 © 2004 JMH Associates. All rights reserved. Process Priority Cautions Use high thread priorities with caution Avoid real time priorities for user processes  User threads may preempt executive threads Assure fairness  All threads should run eventually  Real time priorities may prevent fairness  “Priority inversion”  “Thread starvation”

1-48 © 2004 JMH Associates. All rights reserved. Thread States and Transitions (1 of 2) A thread is running when it is on a processor  SMP systems have multiple processors  Intel Xeon provides single processor multiprocessing - Hyperthreading The executive can place a running thread in the wait state  I/O operations wait wait for data transfer  The thread is blocked or sleeping A thread is ready if it could be running

1-49 © 2004 JMH Associates. All rights reserved. Terminated Running Initialized Waiting Ready Create a new thread Time slice is over Goes to ready queue Wait, Sleep Or any blocking call Object is signaled Thread Id is reused Scheduled on a free processor ExitThread TerminateThread

1-50 © 2004 JMH Associates. All rights reserved. Thread States and Transitions (2 of 3) The scheduler can place a ready thread on any available processor The executive moves a running thread to the ready state if the thread’s time slice expires  Sleep(0) moves a running thread to ready The executive makes a waiting thread ready as soon as appropriate handles are signaled  The thread wakes up

1-51 © 2004 JMH Associates. All rights reserved. Thread States and Transitions (3 of 3) A thread can be suspended or resumed A thread is in the terminated state after it has been terminated but there still open handles  Other threads may interrogate the thread’s state and exit code

1-52 © 2004 JMH Associates. All rights reserved. SummarySummary Threads allow concurrent processing  Reducing overall system overhead  Potentially simplifying programs Single-threaded programs can be inefficient  Managing concurrent and interacting tasks Threads can streamline I/O-bound programs There are reliability and performance risks  Design and code carefully

1-53 © 2004 JMH Associates. All rights reserved. 8. Lab Exercise 7-1 Implement a multithreaded sort command, sortMT nTh FileName  Use the scheme shown on the next overhead  nTh : number of threads  If properly implemented, it will transparently take advantage of SMP systems

1-54 © 2004 JMH Associates. All rights reserved. sortMT Design Array qsort merge Thread0 Thread1 Thread2 Thread3 for (i = 0; i < 4; i++) CreateThread ( ) Wait (Thread0) /* Array is Sorted */ wait (Thread3) wait (Thread2) wait (Thread1)

1-55 © 2004 JMH Associates. All rights reserved. Lab Exercise (cont’d) CAUTION:  The lab solution requires that the number of records in the file to be sorted be a multiple of the number of threads  The number of threads must be a power of two SUGGESTION:  Start with sortMTx.c, a buggy solution  The correct solution is also provided

1-56 © 2004 JMH Associates. All rights reserved. Extra Credit — Additional Exercise Remove the restrictions:  The command form is sortMT nTh file  nTh must be a power of two  The number of records in file must be a multiple of nTh What is the effect of multiple threads on per- formance, even on a single processor system?  Hint: Test with large files