Author: Tony Werten
Date: 23:30:49 09/10/03
Go up one level in this thread
On September 10, 2003 at 15:31:59, Robert Hyatt wrote: >On September 10, 2003 at 02:55:53, Tony Werten wrote: > >>On September 09, 2003 at 14:23:46, Andreas Herrmann wrote: >> >>>On September 09, 2003 at 04:10:53, Tony Werten wrote: >>> >>>>On September 09, 2003 at 03:21:34, Andreas Herrmann wrote: >>>> >>>>>On September 09, 2003 at 02:14:08, Tony Werten wrote: >>>>> >>>>>Hi Tony, >>>>> >>>>>i have just read inside a Delphi internals book last week a 50 side long capitel >>>>>about Thread programming. It says that all local vars are save, but pay >>>>>attention for global vars. See the help to the win api function >>>>>EnterCriticalSection or the VCL object TCriticalSection as a good starting point >>>>>to this theme. >>>>> >>>>>Andreas >>>> >>>>Thanks ( to all) >>>> >>>>It seems that "write" is not threadsafe when used for writing to the console. I >>>>added some checks to make sure only 1 thread is writing at a time. Hope this >>>>solves the problems. >>>> >>>>The problems became worse when I changed from writeln to write which seems >>>>logic: more time spend in writing so bigger change for collisions. >>>> >>>> >>>>Tony >>> >>>yes that can be a problem. I don't have this problem, because only my main >>>thread (= the chess engine) writes to the standard output and my second thread >>>polls the standard input and writes it to a own global buffer. >>> >>>Your problem could also be solved with Mutex (like Robert describes). See >>>CreateMutex or OpenMutex for further help. >> >>I took the cheapo way. >> >>I made a global wb_busy boolean (set to false) >> >>In the writefunction I first do "while wb_busy do sleep(20)" >> >>then wb_busy:=true >> >>and end the function with wb_busy:=false >> >>It seems to work. >> >>Everybody thanks, specially the person who wrote me a week ago that consoles >>aren't threadsafe. Now I understand what he meant :( >> >>Tony >> > >That isn't safe./ > >What happens if _two_ threads simultaneously test wb_busy and find it zero? > >Both drop in, do their writes, and screw things up. > >Atomic locks prevent that by only allowing one program into the critical >section at a time, guaranteed. Hmm, small chance that happens, but I might as well do it that way. Not much difference (to program that is) Tony > > >>> >>>Andreas >>> >>> >>> >>> >>>> >>>>> >>>>> >>>>> >>>>>>Hi, >>>>>> >>>>>>maybe a silly question, but one get quite desperate during debugging. Suppose I >>>>>>have the followin code: >>>>>> >>>>>>procedure whatever(param:integer) >>>>>>begin >>>>>> do_something_heavy_with_param; >>>>>>end; >>>>>> >>>>>>Say, the heavy stuff takes about 10 seconds. >>>>>> >>>>>>If during these secs another thread is calling this function, what happens ? >>>>>> >>>>>>Does every thread gets a "local copy" of the function ? >>>>>> >>>>>>On a single processor, there is a context switch, stuff is pushed on a stack, >>>>>>and everything is safe. >>>>>> >>>>>>What about a dual ? I get the feeling that param is actually changed by the >>>>>>second call. >>>>>> >>>>>>Tony
This page took 0 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.