Now, however, the address is incorrect. Depending on the situation, one of several possible errors will occur,
but the application will surely fail, and it will fail in a way that cannot be reliably reproduced. Such errors can
be devilish to debug.
The section of code that must be executed in isolation in order to avoid corruption is called the ???critical
section.??? Guaranteeing correct execution of the critical sections requires that ???mutual exclusion??? be enforced
when the critical sections are executing. The code of a cooperating thread that is not in the critical section (and
often most of the code is not in the critical section) is called the ???remainder section.???
Since operating systems themselves are often also implemented as multiple threads, coordination between
executing threads or processes is important both to people writing operating systems (???systems programmers???)
and applications programmers. This synchronization problem occupied a great deal of computer science
research during the 1960s, 1970s, and 1980s. Several solutions have been developed.
Dekker offered the first software solution to the problem in 1965, and a simplification by Peterson
was published in 1981. These solutions involved shared variables and employed ???busy waiting??? (i.
Pages:
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286