What is a mutex in C? (pthread_mutex)

Поділитися
Вставка
  • Опубліковано 16 гру 2024

КОМЕНТАРІ • 210

  • @sergiomontes8606
    @sergiomontes8606 3 роки тому +232

    This man deserves so many more views and subscribers. So well explained. My professors need to learn from him on how to teach.

  • @SleepinKnight
    @SleepinKnight Місяць тому +2

    Give a man a fish and he'll eat for a day. Teach a man to fish and he'll eat every day.
    You are outstanding teacher mate. Your approach to keep these amazing videos free of cost makes you great!!! Amazing!!!!

  • @잠만보-k7s
    @잠만보-k7s 3 роки тому +50

    This man is practically the best teacher I've ever had. Thank you SOOO MUCH.

  • @shanthgaitonde
    @shanthgaitonde 2 роки тому +10

    The operations performed by a thread after acquiring a lock are called "critical section". This helps in achieving thread synchronisation. Thanks for the video!

  • @sagejpc1175
    @sagejpc1175 Рік тому +2

    I want you to know you have taught me more about the C language in 10 minutes than an entire university lecture did in 80 minutes. I need to learn this for a project and you have made my life so much easier. Thank you so much.

  • @akapotatis9445
    @akapotatis9445 3 роки тому +6

    This is something random but it's so attractive seeing someone being so smart

  • @wtfitsdrewbritton
    @wtfitsdrewbritton 2 роки тому +6

    Can’t thank you enough for your detailed and succinct explanations! When I began diving in to multithreaded programming with C++17 I became overwhelmed pretty quickly

  • @bh3302
    @bh3302 Рік тому +1

    Man, you are an absolute legend! Thank you so much for uploading this.

  • @zakwanashfaq9879
    @zakwanashfaq9879 3 роки тому +14

    you should train professors on how to teach
    Thanks for explaining, it was very easy to understand.

  • @PHTM04
    @PHTM04 11 місяців тому +2

    Subscribed to your channel man. Its crazy how you break down everything into making them seem so easy! Much appreciated dude and I really hope more see your channel, much love!

  • @havoc1417
    @havoc1417 2 роки тому +1

    Man, you really make C look very simple and lovable.

  • @cicerotcv
    @cicerotcv 3 роки тому

    I bet you are not even close to understand how good you've done for humanity since you started this channel. Thank you very much.

  • @ditobrando4407
    @ditobrando4407 Рік тому

    I wish you were one of my professors. Every time I watch a video from you I get excited to code again.

  • @thegameisneverover7558
    @thegameisneverover7558 3 роки тому +1

    BRO your tutorials bring me through my whole semester

  • @timse699
    @timse699 2 роки тому +1

    This man is practically the best teacher! Sub!

  • @ryanc674
    @ryanc674 Рік тому +1

    dude you’re the best. Thank you so much for making these videos

  • @triplestrikee875
    @triplestrikee875 2 роки тому

    The lock variable + if block example is the best example I have even seen for this Mutex topic

  • @imqwerty5171
    @imqwerty5171 3 роки тому +6

    Thanks for making these amazing tutorials. You earned a sub

  • @harshmishra9941
    @harshmishra9941 Рік тому

    I purely watched this playlist to understand what the heck my OS prof was teaching when she taught us semaphores (although for processes) and I couldn't understand at that time. Loved it !

  • @arushi7899
    @arushi7899 3 роки тому +2

    You're an AMAZING teacher, Sir. Thanks for this. Subscribed!

  • @spexon7311
    @spexon7311 3 роки тому

    You can tell how helpful his videos are because I have not seen 1 dislike yet. You make this so understandable

  • @relicdelic833
    @relicdelic833 3 роки тому +2

    Hello. This is one of the greatest tutorials I've seen. I will be watching the whole playlist, thank you for your hard work and skill in education.

  • @giladefrati8414
    @giladefrati8414 9 місяців тому

    Thank you very much! You explained it so well and clearly; when my university lecturer explained it to me, I did not understand anything. I really like your channel.

  • @FrodosBeutel
    @FrodosBeutel 3 роки тому +1

    You saved alot of work and misunderstanding with the threads videos. Thanks alot

  • @Codality
    @Codality 2 роки тому

    thank you really , you are better than almost all the teachers in this world...
    all the respect

  • @Achao3_AkaoShiro_
    @Achao3_AkaoShiro_ 3 роки тому +1

    Great video, explained how lock and unlock work really well. I was having trouble understanding what it was with my professors explanation lol. Thanks for explaining it, you definitely deserve more views and subs!

  • @ndf782
    @ndf782 9 місяців тому

    Your classes are amazing! All of them! Just one thing, I think that when you say race condition, the correct term is data race. Cheers!

  • @0xfsaymyname
    @0xfsaymyname 7 місяців тому

    Man you are a God, thanks to sharing this with us!

  • @morefun790
    @morefun790 Рік тому

    You make complex things more easier, great job !! thank you.

  • @ManaswiRaj-p8u
    @ManaswiRaj-p8u 9 місяців тому

    Race conditions can also occur on single core processors like if we consider concurrent CPU and the operations are read, increment and write. So lets say P1 starts first then P1 reads increments and then it is preempted by another process P2, then P2 does read, increment and then it is preempted by P1. Now P1 writes the value and exits after which P2 comes and writes its value thus there is a race condition

    • @CodeVault
      @CodeVault  8 місяців тому

      You're right, I didn't want to go into much detail regarding this and gave a simple (albeit wrong) explanation

  • @sanguinho
    @sanguinho Рік тому

    What a clear and simple explanation. Thanks my dude

  • @DeezNardsX
    @DeezNardsX Місяць тому

    Just a slight correction at the end: You can have race conditions on single core processors. We can fake "parallel execution" by time slicing. If the two threads are sharing memory resources, then we can absolutely have a race condition during a context switch.

  • @barankaplan4308
    @barankaplan4308 4 роки тому +1

    PERFECT! looking forward to see a video about spinlock!

  • @Dogdrulezz
    @Dogdrulezz 2 роки тому

    This man is amazing! I wish he had merch, I would love to rock a code vault T-Shirt or Hoody

    • @CodeVault
      @CodeVault  2 роки тому +1

      Haha, thanks. I will think about launching some merch if enough people want them

  • @dudidaabul1782
    @dudidaabul1782 3 роки тому

    Great job. Explanations are easy and clear, very useful information. Thanks a lot!!!

  • @satvikkhare1844
    @satvikkhare1844 3 роки тому

    Thank you sir, these tutorials have made my synchronisation concepts very clear.

  • @iloveukraine-subscribe1kgo822
    @iloveukraine-subscribe1kgo822 3 роки тому +1

    Thank you for the practical Mutual Exclusion video.

  • @yernarduisebai5609
    @yernarduisebai5609 2 роки тому

    You explain way more clear than my professor Park

  • @patrykjaworski402
    @patrykjaworski402 4 роки тому +2

    I love your videos. Your materials are helping me a lot more than my lecturers do and also you making it simple and more understable. Looking forward to POSIX/ SYS V semaphores. Also I would like to ask will there be coming more materials about pthreads ? ( maybe private data of threads). Best of regards code vault. Keep it up!

    • @CodeVault
      @CodeVault  4 роки тому +1

      Thank you! And yes, the last lessons in the course are not yet decided so will add most of the suggestion from the community there (like this one ;) ).

  • @izharhussain7241
    @izharhussain7241 3 роки тому

    you are a gem! Thank you for the videos.

  • @AdiSings2023
    @AdiSings2023 Рік тому

    Best course on Multithreading!!

  • @ayoubrayanemesbah8845
    @ayoubrayanemesbah8845 Рік тому

    just a note mutuale exclusion problem can heppen even for single core processors , because when the quantum ends of a processoes , another process can modifie the variable

  • @bacnguyenkhac154
    @bacnguyenkhac154 2 роки тому

    many thanks for this series, sir! you'v saved me !!!!

  • @dobariyavraj3659
    @dobariyavraj3659 Рік тому +1

    God send savior, HE's the ONE

  • @Nat-qm5vb
    @Nat-qm5vb Рік тому

    Once again, UA-cam saves my homework. Thank you!

  • @tiemen88
    @tiemen88 2 роки тому

    Thank you so much for the explanation on Pthread mutex!

  • @galkk3
    @galkk3 4 роки тому +1

    I really enjoy your videos, thank you
    Could you make a video about Condition Variables with threads?

  • @log_of_1
    @log_of_1 2 роки тому

    Really a wonderful explanation. Thank you!

  • @abugslife2461
    @abugslife2461 3 роки тому

    This is beyond helpful! Thank you so much :)

  • @Dave-cq6pu
    @Dave-cq6pu 4 роки тому

    Really useful videos, just as im learning this at school :D

  • @ivanleon6164
    @ivanleon6164 Рік тому

    race cond can also happen in single core if interrupts are enabledand a variable is modified.

  • @dorianalary7849
    @dorianalary7849 2 роки тому

    Its incredible, I'm French but I understood perfectly this video, thanks you

  • @alireza98325
    @alireza98325 2 роки тому

    Great tutorial.
    I have one comment about the likelihood of race condition happening for single-core processors. Even with a single core and a single processor but multiple threads (as it is the case for the FreeRTOS OS in embedded systems), race conditions will happen more often than not without a mutex, atomic instructions, etc.

    • @CodeVault
      @CodeVault  2 роки тому

      Thanks! Interesting. I wonder now about single-core single-thread environments. Technically there still should be some race conditions but they might be encountered less often. Would you like to test that?

    • @alireza98325
      @alireza98325 2 роки тому

      @@CodeVault
      I think the only possibility for race conditions to happen for single-core single-threaded app, is when a hardware interrupt occurs and ISR gets executed.
      If hardware interrupts were not present, I'm not sure race conditions can ever occur for a single-core, single-threaded app

  • @Smile-si8xv
    @Smile-si8xv 8 місяців тому +1

    arrayyy u r great ji😍

  • @ruxandrawoinaroski5690
    @ruxandrawoinaroski5690 5 місяців тому

    Foarte bine explicat, mersi :)

  • @AshishSinghh
    @AshishSinghh 2 роки тому +1

    You are a gem 🙏🏻

  • @pagetwnas1
    @pagetwnas1 3 роки тому

    Thank you sir , I appreciate your help !

  • @javiercardoso5669
    @javiercardoso5669 Рік тому

    Thank you so much for the video!

  • @armandomiguelzegarracastil2134
    @armandomiguelzegarracastil2134 3 роки тому +1

    AMAZING TEACHER!!!!!!!!!!!!!!!!!! THANK YOU!!!

  • @LinusKarlssonMusic
    @LinusKarlssonMusic 2 роки тому

    Thanks for the great explanation!

  • @jong.4864
    @jong.4864 2 роки тому

    Thank you, you're so helpful!

  • @alihantasyurek4338
    @alihantasyurek4338 Рік тому

    Ty for the awesome videos!

  • @matthewjiang9450
    @matthewjiang9450 3 роки тому

    Fantastic explanation!!! Thanks

  • @giuliamarceladesenafaria3170

    thank you for this playlist

  • @msimamsima9059
    @msimamsima9059 2 роки тому

    Very useful video! Thank you!

  • @tahmeerimtiaz3123
    @tahmeerimtiaz3123 3 роки тому

    Thanks you so much you teaching method are soooo good.

  • @peerapatratanachartchuchai5844
    @peerapatratanachartchuchai5844 2 роки тому

    Thank you for your great video bro. You save my life !!!
    Just curious a little bit from the last video. Base on my understanding, Race condition happen when 2 thread read memory at the same time. Is that possible if mutex lock data in exactly same time and race condition happen. If not why?

    • @CodeVault
      @CodeVault  2 роки тому +1

      First things first: a race condition happens only in two cases:
      1) You have one thread writing a piece of data while other threads are reading it
      2) You have multiple threads writing the same piece of data
      Two threads reading the same piece of data won't cause a race condition.
      Although with mutexes a read and write could happen at the same time, they are designed so that each read and write on them is atomic, meaning there's no way other threads could read the data while another is in the process of writing it (only before it wrote to it or after that)

  •  4 роки тому +1

    Could you make a video about semaphores and pointing the differences between it and mutexes' use cases?

    • @CodeVault
      @CodeVault  4 роки тому +1

      Yep, semaphores and barriers are also planned for this course

  • @habilel5056
    @habilel5056 3 роки тому

    i comment for the referencement, you're a good guy

  • @DineshKumar-wo4tj
    @DineshKumar-wo4tj 2 роки тому +1

    Even if I comment mutex_init and mutex_destroy, i can able to see mutex lock/unlock is working. Then what is the use of init/destroy function???

    • @CodeVault
      @CodeVault  2 роки тому +2

      Well, init is surely needed when using a mutex. Although, probably, since the mutex is global in this video it gets its members automatically initialized to 0 and I think that coincides with what pthread_mutex_init sets the values to. If you try to use the a local mutex I think you'd have issues without the init function call. The pthread_mutex_destroy is not 100% necessary on some architectures but it's good practice

    • @DineshKumar-wo4tj
      @DineshKumar-wo4tj 2 роки тому +1

      @@CodeVault Thank you for your clarity.

  • @spellignerror8998
    @spellignerror8998 Рік тому

    2:09 what if the threads met a race condition at reading lock?

    • @CodeVault
      @CodeVault  11 місяців тому

      locks are thread-safe at the OS level

  • @cindaellas
    @cindaellas 4 місяці тому

    great video! thanks!!!! very good job! greetings from germany

  • @oguzhanasilturk5110
    @oguzhanasilturk5110 Рік тому

    man, i wanna be your thread. such a good explanation

  • @johnthompson4011
    @johnthompson4011 Рік тому

    Bro small problem with your code.I took this as a refresher to threads.Locking and unlocking the mutex in each iteration of the loop introduces unnecessary overhead and reduces the potential benefits of multithreading. A better way is to lock and unlock it outside the loop.Anyway thanks for the video bro

    • @CodeVault
      @CodeVault  Рік тому

      Of course. But this was a short explanation and I wanted to show that the mutexes work even if multiple loops are executing at the same time. In a production environment, this would be very inefficient indeed

  • @Jonathan-ru9zl
    @Jonathan-ru9zl Рік тому

    amazing explanation.

  • @Alexander_444.20
    @Alexander_444.20 3 роки тому

    great explanation thank you!

  • @austinoquinn815
    @austinoquinn815 Рік тому

    Maybe a minor misstatement when you say race conditions only happen on multicore systems. I think race conditions can also happen on one core processors. You could save your mails in thread 1 context switch to thread 2 and finish loop then go back to 1 and finish, then your result would only be 1,000,000 on write back. Great content though. Love this playlist.

    • @CodeVault
      @CodeVault  Рік тому +1

      Yes, it's definitely wrong. Race conditions can happen on any system. It's just much much rare to happen on single-core processors as the context switch would have to happen right between an assignment (which, from what I recall, is a very low chance). Maybe I will make a video on this topic to investigate what is the chance of that happening and whatnot

    • @austinoquinn815
      @austinoquinn815 Рік тому

      @@CodeVault that would be awesome 👍🏻

  • @selvamthiagarajan8152
    @selvamthiagarajan8152 10 місяців тому

    say in the routine() function I had 3 different operations, op1, op2, op3. I place a mutex_lock before op1, mutex_unlock after op1. Assume 3 threads. Will the other threads execute op2, and op3 when op1 is under lock ?

    • @CodeVault
      @CodeVault  8 місяців тому

      No, they won't. All threads will wait at the mutex_lock instruction until the lock is unlocked. Though, this still allows for race conditions on op2 and op3

  • @chaimaeelhaimer870
    @chaimaeelhaimer870 3 роки тому

    Bravo ! thanks for explaining
    my question is : when we may need to create 2 threads with same function?

    • @CodeVault
      @CodeVault  3 роки тому +1

      Whenever you want to split CPU intensive work between the threads, that's when the workload is exactly the same except for some indices.

  • @dattakunal
    @dattakunal 2 роки тому

    Thanks for the wonderful video. I have a question. What happens if thread 1 throws an error before the unlock? Will thread 2 wait forever?

    • @CodeVault
      @CodeVault  2 роки тому +1

      The lock is released, so thread 2 won't wait forever

  • @viniciuss.9250
    @viniciuss.9250 2 роки тому

    Thank you SOOO MUCH.

  • @anthonymarcovecchio5201
    @anthonymarcovecchio5201 Рік тому

    Good stuff my friend

  • @Brad_Script
    @Brad_Script 6 місяців тому

    Apparently there's another way of initializing a pthread_mutex:
    pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
    I wonder what the difference is

    • @CodeVault
      @CodeVault  3 місяці тому

      They are basically the same. The first one could technically be faster since it only assigns some values but can only be used. Also, it guarantees that the lock is always initialized

  • @AsliArtistVlogs
    @AsliArtistVlogs 3 роки тому

    Race codnitions can very well occur in single core processors too. Think of pre-emption.

  • @DineshKumar-wo4tj
    @DineshKumar-wo4tj 2 роки тому

    What is use case of second parameter of NULL when I create a thread. What are the use case i can change from NULL to some other?

    • @CodeVault
      @CodeVault  2 роки тому +1

      It's just some attributes that you can set for the thread to run in a specific way. You can read more on this here: linux.die.net/man/3/pthread_attr_init

  • @misterSaragi
    @misterSaragi 3 роки тому +1

    Your a gem!

  • @Hammy_Pig
    @Hammy_Pig 3 роки тому +1

    you are a god

  • @narasarajv5278
    @narasarajv5278 4 роки тому

    Real time example super explanation.

  • @reshmasri9377
    @reshmasri9377 Рік тому

    i have encounter an error regarding pthread_mutex_destroy(&mutex, NULL);
    but they are not receiving the int type for this function it just takes the refernce that's it. Hope u understand what i am trying to convey.

    • @CodeVault
      @CodeVault  11 місяців тому

      The pthread_mutex_destroy only has one parameter, the mutex you are trying to destroy

  • @pawelsokolowski
    @pawelsokolowski 2 роки тому

    Do I need mutex if one thread is changing the variable, and the other only reads it ? Race condition will not occur, but there can be a collision in access. There are different opinions about the need for mutex. What's yours ?

    • @CodeVault
      @CodeVault  2 роки тому

      You will still get a race condition. I think that's called a dirty read. It depends on the situation if you need a mutex

  • @wisiw
    @wisiw Рік тому

    Can we say that mutex locking forces the multithreading routine into serial?

    • @CodeVault
      @CodeVault  Рік тому

      Yes. Basically the critical section that is surrounded by a mutex lock/unlock will always be serially executed

  • @neeluiiitd
    @neeluiiitd Рік тому

    Thank you.

  • @fernandaeschallots2485
    @fernandaeschallots2485 3 роки тому

    Your video is the best. thx

  • @MrFrete-mi9yf
    @MrFrete-mi9yf 3 роки тому

    i've got a question , sadly i am using windows and the codeblocks compiler , i tried to run without the mutex , and the result was always as expected ( n * mails , n being the number of threads)

    • @CodeVault
      @CodeVault  3 роки тому

      Try incrementing more than once per thread
      Either way, to get access to the pthread API you need to run it on WSL or a Linux distro.

    • @MrFrete-mi9yf
      @MrFrete-mi9yf 3 роки тому

      @@CodeVault thanks for replying , i got it

  • @flowervanessa
    @flowervanessa 3 роки тому

    Is having the mutex locks and unlock inside the for-loop the only solution? Could the mutex's have been on the outside of the for-loop?

    • @CodeVault
      @CodeVault  3 роки тому

      You could do that (and I suggest you actually try + print out which thread incremented the value). But what you'll notice is that if you put the mutex lock/unlock outside the for loop, the thread that locks the mutex will make ALL the add operation and only after that will a different be able to make any add operation on that variable.
      So, while it's possible. It's not what you're looking for usually.

  • @basic-1337
    @basic-1337 9 місяців тому

    Greate video that makes me want to migrate from windows to linux😂

    • @CodeVault
      @CodeVault  8 місяців тому

      For development it's definitely a must. Either to Linux or Mac... Windows is not great for development

  • @axerdas6332
    @axerdas6332 2 роки тому

    Hi, great video! I wanted to ask if we should always use mutex when using global variables? For example, I've got global arrays A, B and C. Arrays A and B are used in threads to read from them only, whereas I write (only write, don't read) to array C in threads. Can I use mutex only for array C as it's the only address that threads actually write to? Thanks in advance :)

    • @CodeVault
      @CodeVault  2 роки тому +1

      Mutexes are only required if you have threads that write to those parts of memory. So, you're correct, you don't need a mutex for arrays A and B. That's one reason multi-threaded applications can scale well.

    • @axerdas6332
      @axerdas6332 2 роки тому

      @@CodeVault Thanks for answer! Btw, thanks to you I was able to do my university exercise. Really appreciate clarity and easy examples in your wideos, keep it up :D

  • @solomonpierce2676
    @solomonpierce2676 Рік тому

    good explanation!

  • @soumavadas1400
    @soumavadas1400 Рік тому

    Love your Videos

  • @coolboy32151
    @coolboy32151 3 роки тому

    very underrated