Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Threads

Author: Bruce Moreland

Date: 22:04:51 04/06/99

Go up one level in this thread



On April 06, 1999 at 21:30:34, James Robertson wrote:

>I am thinking of making my program multithreaded to ease implementation of
>several things. But before I begin, I have several questions: first, if I have
>an input thread that just sits with cin, and my search thread is doing stuff in
>the background, will the search thread be slowed? Second, about locking and
>unlocking resources shared between threads; how is this usually done? If I just
>declare a variable, say

If you have two threads and one of them is blocked like this, it isn't taking
any CPU time.

>bool locked = false;
>
>Can I "lock" and "unlock" resources by just:
>
>....
>
>//see if the variable is locked
>if (!locked) {
>  locked = true;
>  //change shared resources
>  locked = false;
>}
>
>Will this work?

This would be an excellent way to set your head on fire.

Imagine if two things are contending for a resource, they both hit the !locked
thing at the same time, pass this test, then set "locked" to true, so you have
two of them in the same region at the same time.  You can't make any assumptions
when you do multi-threaded code, the other thread could be doing anything at any
time, and could take an arbitrarily long or short time until it's done doing it.

Since you said "thread" instead of "task" I assume you are using the Win32 API.
In the documentation for MSVC (assuming you are using that), there is some basic
stuff about multithreading that you should read.

If you just want to do what you said above, you can use a CRITICAL_SECTION,
which will implement the atomic test-and-set operation that you were trying to
do above (it does everything you did in your example, but it can't kill itself
the way I described, since the "test" and the "set" are guaranteed to happen in
such a way that nothing can slip between them).

If you are serious about this, buy yourself some Tylenol, you'll need it for
debugging, since multithreading adds a whole new dimension in bugs.

bruce



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.