Click here to Skip to main content
12,953,007 members (43,486 online)
Click here to Skip to main content
Add your own
alternative version


20 bookmarked
Posted 9 Apr 2012

Multi-threading in .NET 4

, 11 Apr 2012 CPOL
Rate this:
Please Sign up or sign in to vote.
Huge improvement on Multithreading in new Task Parallel Library for .NET 4


The purpose of this code is to demonstrate how new TPL (Task Parallel Library) of .NET 4 utilize available multi core.<o:p />


Before TPL we have to do thread management. But now that responsibility is taken by TPL.<o:p />

We still have to deal with data integrity (such as critical section data race and deadlock), but at least bigger part is taken from our shoulder.

The Parallel class is defined under the System.Threading.Tasks namespace and the following code demo shows the benefits of using the Parallel class if you want to use multi-threading.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace Threads
    class Program
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern int GetCurrentProcessorNumber();

        private static int criticalSection = 0;
        private static object lockObject = new object();

        static void Main(string[] args)
            Console.WriteLine("==================Sequential calls==============");
            // Get the number of processor.
            int numberOfProcessors = Environment.ProcessorCount;
            for (int i = 0; i < numberOfProcessors; i++)


            Console.WriteLine("==================Parallel calls==============");
            Action action = new Action(Target);

            List<Action> parallelTaskList = new List<Action>();

            // Create equal number of task as number of processor. I hope each thread will execute in seperate processor. We will find out.
            for (int i = 0; i < numberOfProcessors; i++)




        private static void Target()
            lock (lockObject)
                Console.WriteLine(string.Format("Thread ID: {0} and Processor ID: {1} Critical Variable Value: {2}", Thread.CurrentThread.ManagedThreadId, GetCurrentProcessorNumber(), criticalSection));




This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Tony Dubey
United States United States
No Biography provided

You may also be interested in...

Comments and Discussions

QuestionC# Parallel.For multi thread parallel Pin
ytyet20058-Oct-14 14:30
memberytyet20058-Oct-14 14:30 
QuestionMight be nice to put some timings in the output Pin
kevinbrydon11-Apr-12 23:03
memberkevinbrydon11-Apr-12 23:03 
QuestionWhy are you using WinAPI to get a number of processors? Pin
Laserson9-Apr-12 18:49
memberLaserson9-Apr-12 18:49 
AnswerRe: Why are you using WinAPI to get a number of processors? Pin
John Brett9-Apr-12 21:49
memberJohn Brett9-Apr-12 21:49 
GeneralRe: Why are you using WinAPI to get a number of processors? Pin
daylightdj12-Apr-12 5:11
memberdaylightdj12-Apr-12 5:11 

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.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170525.1 | Last Updated 12 Apr 2012
Article Copyright 2012 by Tony Dubey
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid