Click here to Skip to main content
15,917,455 members
Home / Discussions / C#
   

C#

 
QuestionMerging or adding 2 different DataTables into Single DataTable Pin
K V Sekhar11-Jan-10 5:20
K V Sekhar11-Jan-10 5:20 
AnswerRe: Merging or adding 2 different DataTables into Single DataTable Pin
Dave Kreskowiak11-Jan-10 6:26
mveDave Kreskowiak11-Jan-10 6:26 
GeneralRe: Merging or adding 2 different DataTables into Single DataTable Pin
K V Sekhar11-Jan-10 15:39
K V Sekhar11-Jan-10 15:39 
GeneralRe: Merging or adding 2 different DataTables into Single DataTable Pin
Dave Kreskowiak11-Jan-10 17:29
mveDave Kreskowiak11-Jan-10 17:29 
QuestionBlocking Queue Pin
ika211-Jan-10 3:38
ika211-Jan-10 3:38 
AnswerRe: Blocking Queue Pin
harold aptroot11-Jan-10 3:41
harold aptroot11-Jan-10 3:41 
GeneralRe: Blocking Queue Pin
ika211-Jan-10 4:18
ika211-Jan-10 4:18 
GeneralRe: Blocking Queue [modified] Pin
harold aptroot11-Jan-10 4:32
harold aptroot11-Jan-10 4:32 
Should it really be allowed to grow unbounded?

What's worse, your use of Pulse/Wait + lock looks completely wrong to me - since it's locked those pulse/wait are never going to be useful (well it's locked) so Dequeue will wait forever, it can never be Pulsed out of its Wait since Enqueue can not acquire its lock.
Silly moment, scratch that.

So, how about this?
Like so: (untested!)
public class BlockingQueue<T> : IEnumerable<T>
{
    private Queue<T> _queue = new Queue<T>();
    private Semaphore _semaphore = new Semaphore(0, a lot);

    public T Dequeue()
    {
        _semaphore.WaitOne();
        lock (_queue)
            return _queue.Dequeue();
    }

    public void Enqueue(T data)
    {
        lock (_queue)
            _queue.Enqueue(data);
        _semaphore.Release();
    }

    IEnumerator<T> IEnumerable<T>.GetEnumerator()
    {
        while (true) yield return Dequeue();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return ((IEnumerable<T>)this).GetEnumerator();
    }
}


That, of course, still requires locking, since operations on a Queue<T> are not thread safe. So it's dead slow. All the time. Not only when there is too much stuff to put into the buffer (which is when it doesn't matter much if the producer gets slowed down a bit since the consumer is the bottleneck anyway)

modified on Monday, January 11, 2010 11:48 AM

AnswerRe: Blocking Queue Pin
Nicholas Butler11-Jan-10 5:31
sitebuilderNicholas Butler11-Jan-10 5:31 
QuestionProblem at second connection attempt Pin
sleepyman11-Jan-10 3:29
sleepyman11-Jan-10 3:29 
AnswerRe: Problem at second connection attempt Pin
OriginalGriff11-Jan-10 4:06
mveOriginalGriff11-Jan-10 4:06 
GeneralRe: Problem at second connection attempt Pin
sleepyman11-Jan-10 4:15
sleepyman11-Jan-10 4:15 
GeneralRe: Problem at second connection attempt Pin
OriginalGriff11-Jan-10 4:37
mveOriginalGriff11-Jan-10 4:37 
GeneralRe: Problem at second connection attempt Pin
sleepyman11-Jan-10 5:57
sleepyman11-Jan-10 5:57 
GeneralRe: Problem at second connection attempt Pin
OriginalGriff11-Jan-10 8:19
mveOriginalGriff11-Jan-10 8:19 
QuestionRead in Cyrillic, Arabic, Japanese with GetWindowText not working Pin
elmernite11-Jan-10 3:04
elmernite11-Jan-10 3:04 
AnswerMessage Closed Pin
11-Jan-10 3:14
stancrm11-Jan-10 3:14 
QuestionRe: Read in Cyrillic, Arabic, Japanese with GetWindowText not working Pin
elmernite11-Jan-10 3:24
elmernite11-Jan-10 3:24 
QuestionWhat's the best way to determine viewable portion of custom heading in DataGridView? Pin
arnold_w11-Jan-10 2:34
arnold_w11-Jan-10 2:34 
AnswerRe: What's the best way to determine viewable portion of custom heading in DataGridView? Pin
dan!sh 11-Jan-10 3:32
professional dan!sh 11-Jan-10 3:32 
GeneralRe: What's the best way to determine viewable portion of custom heading in DataGridView? Pin
arnold_w11-Jan-10 3:39
arnold_w11-Jan-10 3:39 
GeneralRe: What's the best way to determine viewable portion of custom heading in DataGridView? Pin
dan!sh 11-Jan-10 3:45
professional dan!sh 11-Jan-10 3:45 
GeneralRe: What's the best way to determine viewable portion of custom heading in DataGridView? Pin
arnold_w11-Jan-10 3:50
arnold_w11-Jan-10 3:50 
GeneralRe: What's the best way to determine viewable portion of custom heading in DataGridView? Pin
arnold_w11-Jan-10 3:53
arnold_w11-Jan-10 3:53 
GeneralRe: What's the best way to determine viewable portion of custom heading in DataGridView? Pin
dan!sh 11-Jan-10 4:00
professional dan!sh 11-Jan-10 4:00 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.