Some concurrency issue only arise when there's true concurrency (that
is - two CPUs). The bad news is that these concurrency problems are
usually tougher, the good news is that you can recreate it.

  You can probably wait until a thread is hung, break with the debugger
and see where each thread is waiting, but I usually prefer the old
fashioned way of fixing concurrency issues - lots and lots of debug
printing. This allows me to see what happens before something is locked.
Just make sure your debug printings don't solve the issue (because they
can offer some sort of synchronization which may eliminate such
problems).

  And while we're on the subject, if you experience performance issues
under heavy load, perhaps it's time to switch to IO Completion Ports
instead of one-thread-per-queue. Is there .NET framekwork support for
IOCP, actually?

  Itay.

-----Original Message-----
From: peter lin [mailto:[EMAIL PROTECTED]
Sent: Wednesday, September 06, 2006 9:01 PM
Subject: Re: How to really decrease the thread count when you want to
kill a thread?

Hello Ryan,
    I have a program with 3X threads for pulling data from queue and
each thread should make the pulled data shown on listview which tells
the user what the thread is handling.
I know the data should be marshalled into the main thread(GUI thread) so
I use the codes as follows ISynchronizeInvoke synchronizer = listview
.......
synchronizer.Invoke ...

This scenario works fine when the loading is not heavy(Two CPUs).
When the loading is heavy -- I means each thread is busy pulling data
from queue and there are lots of data in the queue.
A few hours later(Maybe a few days later), I will face a strange issue,
one or some of the busy threads hang.
This program should work 24/7. It turns out a big issue in semiconductor
FAB.
It never happens when we test it in single CPU.  But happen a lots(when
loading is heavy) in two CPUs environment.
I guess it's the MS marshal issue.
I make some test on this , I disable the marshal codes--this means no
data will be shown on listview.
There is no thread hang issue in this scenario.  That's why I guess
marshal is not a very safe way to do the function I need.
I swear I will never use the marshal anymore.
I have used google to search the problem. No report about this issue.
That is why I need to write a watchdog to monitor the threads. Once the
thread hang, abort it and recreate it.

I am sorry I use the wrong tool(process explorer) to check thread count,
because the logic thread count is increasing and I never saw it
decreasing .

I saw the thread count dose decrease in taskman. This is what I want.
Sorry for this confusion.

Thanks for your help.

Best regards Peter




2006/9/6, Ryan Heath <[EMAIL PROTECTED]>:
>
> Hi Peter,
>
> First, you do know the ThreadPool?
>
> Its QueueUserWorkItem can let you do some work without the need of
> creating or deleting threads on your own.
>
> Second, I cannot replay what you are seeing, when I create the threads

> and start them I see the threadcount increasing in taskman, aborting
> them or just let them finish, decreases the threadcount... (Though I
> tested it with 2.0, i cant imaging something fundamental as threading
> has changed from 1.1 to 2.0...)
>
> Why is there a need to abort your threads? You say you are waiting for

> an event, can you let them wait for an "abort" event, and when that
> event occurs the thread just exits its runloop, which will destroy the

> thread by it own.
>
> HTH
> // Ryan
>
> On 9/5/06, peter lin <[EMAIL PROTECTED]> wrote:
> > Dear all,
> >   I create a thread and call its start  method, after some times
> > pass, I make it wait for a event and block itself, then I call
> > thread's abort method.  I found my thread count(viewed by process
> explorer)
> > is still the number before I call abort.
> > I search it from lots of donet books. The only way I can do is
> > calling
> abort
> > or call a flag and blah...
> > My situation is like as follows.
> >
> > I have a multithread application using dotnet 1.1.One of the threads
> hang I
> > don't when it will cause this problem.
> > So I guess I need to write a monitor thread to monitor all the
threads.
> Once
> > thread hang, I can call the thread's abort function and recreate a
> thread
> > with the same properties
> > to do its job. I found the thread count increasing . I just  don't 
> > know why  the thread count  not decrease when the monitor call the
> > thread's
> abort
> > function?
> > Could someone tell me how to do this?
> >
> > Best regards Peter
> >
> > ===================================
> > This list is hosted by DevelopMentor(r)  http://www.develop.com
> >
> > View archives and manage your subscription(s) at
> http://discuss.develop.com
> >
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com

View archives and manage your subscription(s) at
http://discuss.develop.com

<html><body><center><hr><b><font face=arial size=2>Visit the Tel Aviv Stock 
Exchange's New Website<a href=http://www.tase.co.il>
www.tase.co.il</a></b></body></html>

===================================
This list is hosted by DevelopMentorĀ®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to