Click here to Skip to main content
15,888,984 members
Home / Discussions / .NET (Core and Framework)
   

.NET (Core and Framework)

 
GeneralRe: lock Pin
Luc Pattyn29-Apr-10 5:48
sitebuilderLuc Pattyn29-Apr-10 5:48 
GeneralMessage Removed Pin
29-Apr-10 5:50
professionalN_tro_P29-Apr-10 5:50 
GeneralRe: lock PinPopular
Luc Pattyn29-Apr-10 5:57
sitebuilderLuc Pattyn29-Apr-10 5:57 
GeneralMessage Removed Pin
29-Apr-10 6:07
professionalN_tro_P29-Apr-10 6:07 
GeneralRe: lock Pin
Covean29-Apr-10 6:23
Covean29-Apr-10 6:23 
GeneralRe: lock Pin
Alex Manolescu29-Apr-10 11:34
Alex Manolescu29-Apr-10 11:34 
GeneralRe: lock Pin
Dave Kreskowiak29-Apr-10 7:01
mveDave Kreskowiak29-Apr-10 7:01 
GeneralRe: lock Pin
Covean29-Apr-10 6:13
Covean29-Apr-10 6:13 
In addition to Luc's postings.
In your example it really doesn't matter if you use the collection itself or create an object for locking.

But how about this example (I just typed it here, not tested, hope you got what I mean):

private object m_objVideoPlayerSync = new object();
private List<string> m_lstVideos = new List<string>();
private EnumPlaybackState m_playbackState = EnumPlaybackState.Stopped;

private void AddVideoToList(string szVideoFileName)
{
    lock(m_objVideoPlayerSync)
    {
        m_lstVideos.Add(szVideoFileName);
    }
}

private void PlayNextVideo()
{
    lock(m_objVideoPlayerSync)
    {
        string szVideo = m_lstVideos[0];
        m_lstVideos.RemoveAt(0);
        m_playbackState = EnumPlaybackState.Playback;
        StartPlayBack();
    }
}

private void StopVideo()
{
    lock(m_objVideoPlayerSync)
    {
        StopPlayBack();
        m_playbackState = EnumPlaybackState.Stopped;
    }
}


In the function StopVideo() locking the list of videos would be crude, cause you never do anything on this list, but you need some object to lock.
But doing 2 locks in PlayNextVideo() like

string szVideo = string.Empty;
lock(m_lstVideos)
{
    szVideo = m_lstVideos[0];
    m_lstVideos.RemoveAt(0);
}

lock(m_objVideoPlayerSync)
{
    m_playbackState = EnumPlaybackState.Playback;
    StartPlayBack();
}


raises the chance that two threads, both starting the function PlayNextVideo() at the same, would play the same video.
In my first example this would never happen!

Here are some guidelines from MSDN how to use and not to use locks:


In general, avoid locking on a public type, or instances beyond your code's control. The common constructs lock (this), lock (typeof (MyType)), and lock ("myLock") violate this guideline:

lock (this) is a problem if the instance can be accessed publicly.

lock (typeof (MyType)) is a problem if MyType is publicly accessible.

lock(“myLock”) is a problem since any other code in the process using the same string, will share the same lock.

Best practice is to define a private object to lock on, or a private static object variable to protect data common to all instances.



I hope this helps you to understand locking a little bit better.
Greetings
Covean

GeneralRe: lock Pin
supercat929-Apr-10 9:11
supercat929-Apr-10 9:11 
GeneralRe: lock Pin
Luc Pattyn29-Apr-10 9:38
sitebuilderLuc Pattyn29-Apr-10 9:38 
GeneralRe: lock Pin
supercat929-Apr-10 13:10
supercat929-Apr-10 13:10 
GeneralRe: lock Pin
Luc Pattyn29-Apr-10 13:56
sitebuilderLuc Pattyn29-Apr-10 13:56 
GeneralRe: lock Pin
supercat930-Apr-10 5:02
supercat930-Apr-10 5:02 
GeneralRe: lock Pin
Luc Pattyn30-Apr-10 5:19
sitebuilderLuc Pattyn30-Apr-10 5:19 
GeneralEnumerators Pin
supercat930-Apr-10 6:12
supercat930-Apr-10 6:12 
GeneralRe: Enumerators Pin
Luc Pattyn30-Apr-10 9:18
sitebuilderLuc Pattyn30-Apr-10 9:18 
GeneralRe: Enumerators Pin
supercat930-Apr-10 11:31
supercat930-Apr-10 11:31 
QuestionReference a .NET 3.5 assembly form a .NET 2.0 other assembly: in VS2008 ok, not in VS2010 Pin
Ferdinando Santacroce29-Apr-10 3:22
Ferdinando Santacroce29-Apr-10 3:22 
AnswerRe: Reference a .NET 3.5 assembly form a .NET 2.0 other assembly: in VS2008 ok, not in VS2010 Pin
Not Active29-Apr-10 3:35
mentorNot Active29-Apr-10 3:35 
GeneralRe: Reference a .NET 3.5 assembly form a .NET 2.0 other assembly: in VS2008 ok, not in VS2010 Pin
Luc Pattyn29-Apr-10 4:18
sitebuilderLuc Pattyn29-Apr-10 4:18 
AnswerRe: Reference a .NET 3.5 assembly form a .NET 2.0 other assembly: in VS2008 ok, not in VS2010 Pin
Ferdinando Santacroce29-Apr-10 5:54
Ferdinando Santacroce29-Apr-10 5:54 
QuestionAny Problem with VS 2010 Ultimate? if VS 2008 already exists.. Pin
yadlaprasad29-Apr-10 1:26
yadlaprasad29-Apr-10 1:26 
AnswerRe: Any Problem with VS 2010 Ultimate? if VS 2008 already exists.. Pin
Michel Godfroid29-Apr-10 1:47
Michel Godfroid29-Apr-10 1:47 
AnswerRe: Any Problem with VS 2010 Ultimate? if VS 2008 already exists.. Pin
Not Active29-Apr-10 1:56
mentorNot Active29-Apr-10 1:56 
QuestionSetting DisplayMember & ValueMember with DataTable Pin
massaslayer28-Apr-10 10:21
massaslayer28-Apr-10 10:21 

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.