Lesson 13advancedThreads

Synchronization

Solving concurrency problems. Covers the critical section problem, named semaphores, mutexes, and condition variables. Theory-heavy lesson with extensive markdown notes on naive locks, hardware solutions (test-and-set, CAS), and the bakery algorithm.

mutexsemaphorecondition-variablecritical-sectionsynchronization
Prerequisites:12. POSIX Threads
1

Named Semaphores

Using POSIX named semaphores (sem_open, sem_wait, sem_post) to synchronize access to a shared resource.

07-named-semaphore.c110 lines
Expected Outputclick Run to execute live
[Program timed out after 5 seconds]
2

Mutex Counter

Protecting a shared counter with a pthread mutex — fixing the race condition from the previous lesson.

08-pthread-mutex.c82 lines
Expected Outputclick Run to execute live
========================================
  pthread_mutex — Thread-Safe Counter
========================================

[Thread 1] counter++ → 1 (mutex held — safe!)
[Thread 2] counter++ → 2 (mutex held — safe!)
[Thread 3] counter++ → 3 (mutex held — safe!)
[Thread 4] counter++ → 4 (mutex held — safe!)
[Thread 5] counter++ → 5 (mutex held — safe!)
[Thread 1] counter++ → 6 (mutex held — safe!)
[Thread 2] counter++ → 7 (mutex held — safe!)
[Thread 3] counter++ → 8 (mutex held — safe!)
[Thread 4] counter++ → 9 (mutex held — safe!)
[Thread 5] counter++ → 10 (mutex held — safe!)
[Thread 1] counter++ → 11 (mutex held — safe!)
[Thread 2] counter++ → 12 (mutex held — safe!)
[Thread 3] counter++ → 13 (mutex held — safe!)
[Thread 4] counter++ → 14 (mutex held — safe!)
[Thread 5] counter++ → 15 (mutex held — safe!)
[Thread 1] counter++ → 16 (mutex held — safe!)
[Thread 2] counter++ → 17 (mutex held — safe!)
[Thread 3] counter++ → 18 (mutex held — safe!)
[Thread 5] counter++ → 19 (mutex held — safe!)
[Thread 4] counter++ → 20 (mutex held — safe!)
[Thread 1] counter++ → 21 (mutex held — safe!)
[Thread 2] counter++ → 22 (mutex held — safe!)
[Thread 3] counter++ → 23 (mutex held — safe!)
[Thread 5] counter++ → 24 (mutex held — safe!)
[Thread 4] counter++ → 25 (mutex held — safe!)
[Thread 1] counter++ → 26 (mutex held — safe!)
[Thread 2] counter++ → 27 (mutex held — safe!)
[Thread 3] counter++ → 28 (mutex held — safe!)
[Thread 5] counter++ → 29 (mutex held — safe!)
[Thread 4] counter++ → 30 (mutex held — safe!)
[Thread 1] counter++ → 31 (mutex held — safe!)
[Thread 2] counter++ → 32 (mutex held — safe!)
[Thread 3] counter++ → 33 (mutex held — safe!)
[Thread 5] counter++ → 34 (mutex held — safe!)
[Thread 4] counter++ → 35 (mutex held — safe!)
[Thread 1] counter++ → 36 (mutex held — safe!)
[Thread 2] counter++ → 37 (mutex held — safe!)
[Thread 3] counter++ → 38 (mutex held — safe!)
[Thread 5] counter++ → 39 (mutex held — safe!)
[Thread 4] counter++ → 40 (mutex held — safe!)
[Thread 1] counter++ → 41 (mutex held — safe!)
[Thread 2] counter++ → 42 (mutex held — safe!)
[Thread 3] counter++ → 43 (mutex held — safe!)
[Thread 5] counter++ → 44 (mutex held — safe!)
[Thread 4] counter++ → 45 (mutex held — safe!)
[Thread 1] counter++ → 46 (mutex held — safe!)
[Thread 2] counter++ → 47 (mutex held — safe!)
[Thread 3] counter++ → 48 (mutex held — safe!)
[Thread 5] counter++ → 49 (mutex held — safe!)
[Thread 4] counter++ → 50 (mutex held — safe!)
[Thread 1] counter++ → 51 (mutex held — safe!)
[Thread 2] counter++ → 52 (mutex held — safe!)
[Thread 3] counter++ → 53 (mutex held — safe!)
[Thread 5] counter++ → 54 (mutex held — safe!)
[Thread 4] counter++ → 55 (mutex held — safe!)
[Thread 1] counter++ → 56 (mutex held — safe!)
[Thread 2] counter++ → 57 (mutex held — safe!)
[Thread 3] counter++ → 58 (mutex held — safe!)
[Thread 5] counter++ → 59 (mutex held — safe!)
[Thread 4] counter++ → 60 (mutex held — safe!)
[Thread 1] counter++ → 61 (mutex held — safe!)
[Thread 2] counter++ → 62 (mutex held — safe!)
[Thread 3] counter++ → 63 (mutex held — safe!)
[Thread 5] counter++ → 64 (mutex held — safe!)
[Thread 4] counter++ → 65 (mutex held — safe!)
[Thread 1] counter++ → 66 (mutex held — safe!)
[Thread 2] counter++ → 67 (mutex held — safe!)
[Thread 3] counter++ → 68 (mutex held — safe!)
[Thread 5] counter++ → 69 (mutex held — safe!)
[Thread 4] counter++ → 70 (mutex held — safe!)
[Thread 1] counter++ → 71 (mutex held — safe!)
[Thread 2] counter++ → 72 (mutex held — safe!)
[Thread 3] counter++ → 73 (mutex held — safe!)
[Thread 5] counter++ → 74 (mutex held — safe!)
[Thread 4] counter++ → 75 (mutex held — safe!)
[Thread 1] counter++ → 76 (mutex held — safe!)
[Thread 2] counter++ → 77 (mutex held — safe!)
[Thread 3] counter++ → 78 (mutex held — safe!)
[Thread 5] counter++ → 79 (mutex held — safe!)
[Thread 4] counter++ → 80 (mutex held — safe!)
[Thread 1] counter++ → 81 (mutex held — safe!)
[Thread 2] counter++ → 82 (mutex held — safe!)
[Thread 3] counter++ → 83 (mutex held — safe!)
[Thread 5] counter++ → 84 (mutex held — safe!)
[Thread 4] counter++ → 85 (mutex held — safe!)
[Thread 1] counter++ → 86 (mutex held — safe!)
[Thread 2] counter++ → 87 (mutex held — safe!)
[Thread 3] counter++ → 88 (mutex held — safe!)
[Thread 5] counter++ → 89 (mutex held — safe!)
[Thread 4] counter++ → 90 (mutex held — safe!)
[Thread 1] counter++ → 91 (mutex held — safe!)
[Thread 2] counter++ → 92 (mutex held — safe!)
[Thread 3] counter++ → 93 (mutex held — safe!)
[Thread 5] counter++ → 94 (mutex held — safe!)
[Thread 4] counter++ → 95 (mutex held — safe!)
[Thread 2] counter++ → 96 (mutex held — safe!)
[Thread 1] counter++ → 97 (mutex held — safe!)
[Thread 3] counter++ → 98 (mutex held — safe!)
[Thread 5] counter++ → 99 (mutex held — safe!)
[Thread 4] counter++ → 100 (mutex held — safe!)
[Thread 2] counter++ → 101 (mutex held — safe!)
[Thread 1] counter++ → 102 (mutex held — safe!)
[Thread 3] counter++ → 103 (mutex held — safe!)
[Thread 5] counter++ → 104 (mutex held — safe!)
[Thread 4] counter++ → 105 (mutex held — safe!)
[Thread 2] counter++ → 106 (mutex held — safe!)
[Thread 1] counter++ → 107 (mutex held — safe!)
[Thread 3] counter++ → 108 (mutex held — safe!)
[Thread 5] counter++ → 109 (mutex held — safe!)
[Thread 4] counter++ → 110 (mutex held — safe!)
[Thread 2] counter++ → 111 (mutex held — safe!)
[Thread 1] counter++ → 112 (mutex held — safe!)
[Thread 3] counter++ → 113 (mutex held — safe!)
[Thread 5] counter++ → 114 (mutex held — safe!)
[Thread 4] counter++ → 115 (mutex held — safe!)
[Thread 2] counter++ → 116 (mutex held — safe!)
[Thread 1] counter++ → 117 (mutex held — safe!)
[Thread 3] counter++ → 118 (mutex held — safe!)
[Thread 5] counter++ → 119 (mutex held — safe!)
[Thread 4] counter++ → 120 (mutex held — safe!)
[Thread 2] counter++ → 121 (mutex held — safe!)
[Thread 1] counter++ → 122 (mutex held — safe!)
[Thread 3] counter++ → 123 (mutex held — safe!)
[Thread 5] counter++ → 124 (mutex held — safe!)
[Thread 4] counter++ → 125 (mutex held — safe!)
[Thread 2] counter++ → 126 (mutex held — safe!)
[Thread 1] counter++ → 127 (mutex held — safe!)
[Thread 3] counter++ → 128 (mutex held — safe!)
[Thread 5] counter++ → 129 (mutex held — safe!)
[Thread 4] counter++ → 130 (mutex held — safe!)
[Thread 2] counter++ → 131 (mutex held — safe!)
[Thread 1] counter++ → 132 (mutex held — safe!)
[Thread 3] counter++ → 133 (mutex held — safe!)
[Thread 5] counter++ → 134 (mutex held — safe!)
[Thread 4] counter++ → 135 (mutex held — safe!)
[Thread 2] counter++ → 136 (mutex held — safe!)
[Thread 1] counter++ → 137 (mutex held — safe!)
[Thread 3] counter++ → 138 (mutex held — safe!)
[Thread 5] counter++ → 139 (mutex held — safe!)
[Thread 4] counter++ → 140 (mutex held — safe!)
[Thread 2] counter++ → 141 (mutex held — safe!)
[Thread 1] counter++ → 142 (mutex held — safe!)
[Thread 3] counter++ → 143 (mutex held — safe!)
[Thread 5] counter++ → 144 (mutex held — safe!)
[Thread 4] counter++ → 145 (mutex held — safe!)
[Thread 2] counter++ → 146 (mutex held — safe!)
[Thread 1] counter++ → 147 (mutex held — safe!)
[Thread 3] counter++ → 148 (mutex held — safe!)
[Thread 5] counter++ → 149 (mutex held — safe!)
[Thread 4] counter++ → 150 (mutex held — safe!)
[Thread 2] counter++ → 151 (mutex held — safe!)
[Thread 1] counter++ → 152 (mutex held — safe!)
[Thread 3] counter++ → 153 (mutex held — safe!)
[Thread 5] counter++ → 154 (mutex held — safe!)
[Thread 4] counter++ → 155 (mutex held — safe!)
[Thread 2] counter++ → 156 (mutex held — safe!)
[Thread 1] counter++ → 157 (mutex held — safe!)
[Thread 3] counter++ → 158 (mutex held — safe!)
[Thread 5] counter++ → 159 (mutex held — safe!)
[Thread 4] counter++ → 160 (mutex held — safe!)
[Thread 2] counter++ → 161 (mutex held — safe!)
[Thread 1] counter++ → 162 (mutex held — safe!)
[Thread 3] counter++ → 163 (mutex held — safe!)
[Thread 5] counter++ → 164 (mutex held — safe!)
[Thread 4] counter++ → 165 (mutex held — safe!)
[Thread 2] counter++ → 166 (mutex held — safe!)
[Thread 1] counter++ → 167 (mutex held — safe!)
[Thread 3] counter++ → 168 (mutex held — safe!)
[Thread 5] counter++ → 169 (mutex held — safe!)
[Thread 4] counter++ → 170 (mutex held — safe!)
[Thread 2] counter++ → 171 (mutex held — safe!)
[Thread 1] counter++ → 172 (mutex held — safe!)
[Thread 3] counter++ → 173 (mutex held — safe!)
[Thread 5] counter++ → 174 (mutex held — safe!)
[Thread 4] counter++ → 175 (mutex held — safe!)
[Thread 2] counter++ → 176 (mutex held — safe!)
[Thread 1] counter++ → 177 (mutex held — safe!)
[Thread 3] counter++ → 178 (mutex held — safe!)
[Thread 5] counter++ → 179 (mutex held — safe!)
[Thread 4] counter++ → 180 (mutex held — safe!)
[Thread 2] counter++ → 181 (mutex held — safe!)
[Thread 1] counter++ → 182 (mutex held — safe!)
[Thread 3] counter++ → 183 (mutex held — safe!)
[Thread 5] counter++ → 184 (mutex held — safe!)
[Thread 4] counter++ → 185 (mutex held — safe!)
[Thread 2] counter++ → 186 (mutex held — safe!)
[Thread 1] counter++ → 187 (mutex held — safe!)
[Thread 3] counter++ → 188 (mutex held — safe!)
[Thread 4] counter++ → 189 (mutex held — safe!)
[Thread 5] counter++ → 190 (mutex held — safe!)
[Thread 2] counter++ → 191 (mutex held — safe!)
[Thread 1] counter++ → 192 (mutex held — safe!)
[Thread 3] counter++ → 193 (mutex held — safe!)
[Thread 4] counter++ → 194 (mutex held — safe!)
[Thread 5] counter++ → 195 (mutex held — safe!)
[Thread 2] counter++ → 196 (mutex held — safe!)
[Thread 1] counter++ → 197 (mutex held — safe!)
[Thread 3] counter++ → 198 (mutex held — safe!)
[Thread 5] counter++ → 199 (mutex held — safe!)
[Thread 4] counter++ → 200 (mutex held — safe!)
[Thread 2] counter++ → 201 (mutex held — safe!)
[Thread 1] counter++ → 202 (mutex held — safe!)
[Thread 3] counter++ → 203 (mutex held — safe!)
[Thread 4] counter++ → 204 (mutex held — safe!)
[Thread 5] counter++ → 205 (mutex held — safe!)
[Thread 2] counter++ → 206 (mutex held — safe!)
[Thread 1] counter++ → 207 (mutex held — safe!)
[Thread 3] counter++ → 208 (mutex held — safe!)
[Thread 5] counter++ → 209 (mutex held — safe!)
[Thread 4] counter++ → 210 (mutex held — safe!)
[Thread 2] counter++ → 211 (mutex held — safe!)
[Thread 1] counter++ → 212 (mutex held — safe!)
[Thread 4] counter++ → 213 (mutex held — safe!)
[Thread 3] counter++ → 214 (mutex held — safe!)
[Thread 5] counter++ → 215 (mutex held — safe!)
[Thread 2] counter++ → 216 (mutex held — safe!)
[Thread 1] counter++ → 217 (mutex held — safe!)
[Thread 4] counter++ → 218 (mutex held — safe!)
[Thread 3] counter++ → 219 (mutex held — safe!)
[Thread 5] counter++ → 220 (mutex held — safe!)
[Thread 2] counter++ → 221 (mutex held — safe!)
[Thread 1] counter++ → 222 (mutex held — safe!)
[Thread 4] counter++ → 223 (mutex held — safe!)
[Thread 3] counter++ → 224 (mutex held — safe!)
[Thread 5] counter++ → 225 (mutex held — safe!)
[Thread 2] counter++ → 226 (mutex held — safe!)
[Thread 1] counter++ → 227 (mutex held — safe!)
[Thread 4] counter++ → 228 (mutex held — safe!)
[Thread 3] counter++ → 229 (mutex held — safe!)
[Thread 5] counter++ → 230 (mutex held — safe!)
[Thread 2] counter++ → 231 (mutex held — safe!)
[Thread 1] counter++ → 232 (mutex held — safe!)
[Thread 4] counter++ → 233 (mutex held — safe!)
[Thread 3] counter++ → 234 (mutex held — safe!)
[Thread 5] counter++ → 235 (mutex held — safe!)
[Thread 2] counter++ → 236 (mutex held — safe!)
[Thread 1] counter++ → 237 (mutex held — safe!)
[Thread 4] counter++ → 238 (mutex held — safe!)
[Thread 3] counter++ → 239 (mutex held — safe!)
[Thread 5] counter++ → 240 (mutex held — safe!)
[Thread 2] counter++ → 241 (mutex held — safe!)
[Thread 1] counter++ → 242 (mutex held — safe!)
[Thread 4] counter++ → 243 (mutex held — safe!)
[Thread 3] counter++ → 244 (mutex held — safe!)
[Thread 5] counter++ → 245 (mutex held — safe!)
[Thread 2] counter++ → 246 (mutex held — safe!)
[Thread 1] counter++ → 247 (mutex held — safe!)
[Thread 4] counter++ → 248 (mutex held — safe!)
[Thread 3] counter++ → 249 (mutex held — safe!)
[Thread 5] counter++ → 250 (mutex held — safe!)
[Thread 2] counter++ → 251 (mutex held — safe!)
[Thread 1] counter++ → 252 (mutex held — safe!)
[Thread 4] counter++ → 253 (mutex held — safe!)
[Thread 3] counter++ → 254 (mutex held — safe!)
[Thread 5] counter++ → 255 (mutex held — safe!)
[Thread 2] counter++ → 256 (mutex held — safe!)
[Thread 1] counter++ → 257 (mutex held — safe!)
[Thread 4] counter++ → 258 (mutex held — safe!)
[Thread 3] counter++ → 259 (mutex held — safe!)
[Thread 5] counter++ → 260 (mutex held — safe!)
[Thread 2] counter++ → 261 (mutex held — safe!)
[Thread 1] counter++ → 262 (mutex held — safe!)
[Thread 4] counter++ → 263 (mutex held — safe!)
[Thread 3] counter++ → 264 (mutex held — safe!)
[Thread 5] counter++ → 265 (mutex held — safe!)
[Thread 2] counter++ → 266 (mutex held — safe!)
[Thread 1] counter++ → 267 (mutex held — safe!)
[Thread 4] counter++ → 268 (mutex held — safe!)
[Thread 3] counter++ → 269 (mutex held — safe!)
[Thread 5] counter++ → 270 (mutex held — safe!)
[Thread 2] counter++ → 271 (mutex held — safe!)
[Thread 1] counter++ → 272 (mutex held — safe!)
[Thread 4] counter++ → 273 (mutex held — safe!)
[Thread 3] counter++ → 274 (mutex held — safe!)
[Thread 5] counter++ → 275 (mutex held — safe!)
[Thread 2] counter++ → 276 (mutex held — safe!)
[Thread 1] counter++ → 277 (mutex held — safe!)
[Thread 4] counter++ → 278 (mutex held — safe!)
[Thread 3] counter++ → 279 (mutex held — safe!)
[Thread 5] counter++ → 280 (mutex held — safe!)
[Thread 2] counter++ → 281 (mutex held — safe!)
[Thread 1] counter++ → 282 (mutex held — safe!)
[Thread 4] counter++ → 283 (mutex held — safe!)
[Thread 3] counter++ → 284 (mutex held — safe!)
[Thread 5] counter++ → 285 (mutex held — safe!)
[Thread 2] counter++ → 286 (mutex held — safe!)
[Thread 1] counter++ → 287 (mutex held — safe!)
[Thread 4] counter++ → 288 (mutex held — safe!)
[Thread 3] counter++ → 289 (mutex held — safe!)
[Thread 5] counter++ → 290 (mutex held — safe!)
[Thread 2] counter++ → 291 (mutex held — safe!)
[Thread 1] counter++ → 292 (mutex held — safe!)
[Thread 4] counter++ → 293 (mutex held — safe!)
[Thread 3] counter++ → 294 (mutex held — safe!)
[Thread 5] counter++ → 295 (mutex held — safe!)
[Thread 2] counter++ → 296 (mutex held — safe!)
[Thread 1] counter++ → 297 (mutex held — safe!)
[Thread 4] counter++ → 298 (mutex held — safe!)
[Thread 3] counter++ → 299 (mutex held — safe!)
[Thread 5] counter++ → 300 (mutex held — safe!)
[Thread 2] counter++ → 301 (mutex held — safe!)
[Thread 1] counter++ → 302 (mutex held — safe!)
[Thread 3] counter++ → 303 (mutex held — safe!)
[Thread 4] counter++ → 304 (mutex held — safe!)
[Thread 5] counter++ → 305 (mutex held — safe!)
[Thread 2] counter++ → 306 (mutex held — safe!)
[Thread 1] counter++ → 307 (mutex held — safe!)
[Thread 3] counter++ → 308 (mutex held — safe!)
[Thread 4] counter++ → 309 (mutex held — safe!)
[Thread 5] counter++ → 310 (mutex held — safe!)
[Thread 2] counter++ → 311 (mutex held — safe!)
[Thread 1] counter++ → 312 (mutex held — safe!)
[Thread 3] counter++ → 313 (mutex held — safe!)
[Thread 4] counter++ → 314 (mutex held — safe!)
[Thread 5] counter++ → 315 (mutex held — safe!)
[Thread 2] counter++ → 316 (mutex held — safe!)
[Thread 1] counter++ → 317 (mutex held — safe!)
[Thread 3] counter++ → 318 (mutex held — safe!)
[Thread 4] counter++ → 319 (mutex held — safe!)
[Thread 5] counter++ → 320 (mutex held — safe!)
[Thread 2] counter++ → 321 (mutex held — safe!)
[Thread 1] counter++ → 322 (mutex held — safe!)
[Thread 3] counter++ → 323 (mutex held — safe!)
[Thread 4] counter++ → 324 (mutex held — safe!)
[Thread 5] counter++ → 325 (mutex held — safe!)
[Thread 2] counter++ → 326 (mutex held — safe!)
[Thread 1] counter++ → 327 (mutex held — safe!)
[Thread 4] counter++ → 328 (mutex held — safe!)
[Thread 3] counter++ → 329 (mutex held — safe!)
[Thread 5] counter++ → 330 (mutex held — safe!)
[Thread 2] counter++ → 331 (mutex held — safe!)
[Thread 1] counter++ → 332 (mutex held — safe!)
[Thread 4] counter++ → 333 (mutex held — safe!)
[Thread 3] counter++ → 334 (mutex held — safe!)
[Thread 5] counter++ → 335 (mutex held — safe!)
[Thread 2] counter++ → 336 (mutex held — safe!)
[Thread 4] counter++ → 337 (mutex held — safe!)
[Thread 1] counter++ → 338 (mutex held — safe!)
[Thread 3] counter++ → 339 (mutex held — safe!)
[Thread 5] counter++ → 340 (mutex held — safe!)
[Thread 2] counter++ → 341 (mutex held — safe!)
[Thread 4] counter++ → 342 (mutex held — safe!)
[Thread 1] counter++ → 343 (mutex held — safe!)
[Thread 3] counter++ → 344 (mutex held — safe!)
[Thread 5] counter++ → 345 (mutex held — safe!)
[Thread 2] counter++ → 346 (mutex held — safe!)
[Thread 4] counter++ → 347 (mutex held — safe!)
[Thread 1] counter++ → 348 (mutex held — safe!)
[Thread 3] counter++ → 349 (mutex held — safe!)
[Thread 5] counter++ → 350 (mutex held — safe!)
[Thread 2] counter++ → 351 (mutex held — safe!)
[Thread 4] counter++ → 352 (mutex held — safe!)
[Thread 1] counter++ → 353 (mutex held — safe!)
[Thread 3] counter++ → 354 (mutex held — safe!)
[Thread 5] counter++ → 355 (mutex held — safe!)
[Thread 2] counter++ → 356 (mutex held — safe!)
[Thread 4] counter++ → 357 (mutex held — safe!)
[Thread 1] counter++ → 358 (mutex held — safe!)
[Thread 3] counter++ → 359 (mutex held — safe!)
[Thread 5] counter++ → 360 (mutex held — safe!)
[Thread 2] counter++ → 361 (mutex held — safe!)
[Thread 4] counter++ → 362 (mutex held — safe!)
[Thread 1] counter++ → 363 (mutex held — safe!)
[Thread 3] counter++ → 364 (mutex held — safe!)
[Thread 5] counter++ → 365 (mutex held — safe!)
[Thread 2] counter++ → 366 (mutex held — safe!)
[Thread 4] counter++ → 367 (mutex held — safe!)
[Thread 1] counter++ → 368 (mutex held — safe!)
[Thread 3] counter++ → 369 (mutex held — safe!)
[Thread 5] counter++ → 370 (mutex held — safe!)
[Thread 2] counter++ → 371 (mutex held — safe!)
[Thread 4] counter++ → 372 (mutex held — safe!)
[Thread 1] counter++ → 373 (mutex held — safe!)
[Thread 3] counter++ → 374 (mutex held — safe!)
[Thread 5] counter++ → 375 (mutex held — safe!)
[Thread 2] counter++ → 376 (mutex held — safe!)
[Thread 4] counter++ → 377 (mutex held — safe!)
[Thread 1] counter++ → 378 (mutex held — safe!)
[Thread 3] counter++ → 379 (mutex held — safe!)
[Thread 5] counter++ → 380 (mutex held — safe!)
[Thread 2] counter++ → 381 (mutex held — safe!)
[Thread 4] counter++ → 382 (mutex held — safe!)
[Thread 1] counter++ → 383 (mutex held — safe!)
[Thread 3] counter++ → 384 (mutex held — safe!)
[Thread 5] counter++ → 385 (mutex held — safe!)
[Thread 2] counter++ → 386 (mutex held — safe!)
[Thread 4] counter++ → 387 (mutex held — safe!)
[Thread 1] counter++ → 388 (mutex held — safe!)
[Thread 5] counter++ → 389 (mutex held — safe!)
[Thread 3] counter++ → 390 (mutex held — safe!)
[Thread 2] counter++ → 391 (mutex held — safe!)
[Thread 4] counter++ → 392 (mutex held — safe!)
[Thread 1] counter++ → 393 (mutex held — safe!)
[Thread 5] counter++ → 394 (mutex held — safe!)
[Thread 3] counter++ → 395 (mutex held — safe!)
[Thread 2] counter++ → 396 (mutex held — safe!)
[Thread 4] counter++ → 397 (mutex held — safe!)
[Thread 1] counter++ → 398 (mutex held — safe!)
[Thread 5] counter++ → 399 (mutex held — safe!)
[Thread 3] counter++ → 400 (mutex held — safe!)
[Thread 2] counter++ → 401 (mutex held — safe!)
[Thread 4] counter++ → 402 (mutex held — safe!)
[Thread 1] counter++ → 403 (mutex held — safe!)
[Thread 5] counter++ → 404 (mutex held — safe!)
[Thread 3] counter++ → 405 (mutex held — safe!)
[Thread 2] counter++ → 406 (mutex held — safe!)
[Thread 4] counter++ → 407 (mutex held — safe!)
[Thread 1] counter++ → 408 (mutex held — safe!)
[Thread 5] counter++ → 409 (mutex held — safe!)
[Thread 3] counter++ → 410 (mutex held — safe!)
[Thread 2] counter++ → 411 (mutex held — safe!)
[Thread 1] counter++ → 412 (mutex held — safe!)
[Thread 4] counter++ → 413 (mutex held — safe!)
[Thread 5] counter++ → 414 (mutex held — safe!)
[Thread 3] counter++ → 415 (mutex held — safe!)
[Thread 2] counter++ → 416 (mutex held — safe!)
[Thread 1] counter++ → 417 (mutex held — safe!)
[Thread 4] counter++ → 418 (mutex held — safe!)
[Thread 5] counter++ → 419 (mutex held — safe!)
[Thread 3] counter++ → 420 (mutex held — safe!)
[Thread 2] counter++ → 421 (mutex held — safe!)
[Thread 1] counter++ → 422 (mutex held — safe!)
[Thread 4] counter++ → 423 (mutex held — safe!)
[Thread 5] counter++ → 424 (mutex held — safe!)
[Thread 3] counter++ → 425 (mutex held — safe!)
[Thread 2] counter++ → 426 (mutex held — safe!)
[Thread 1] counter++ → 427 (mutex held — safe!)
[Thread 4] counter++ → 428 (mutex held — safe!)
[Thread 5] counter++ → 429 (mutex held — safe!)
[Thread 3] counter++ → 430 (mutex held — safe!)
[Thread 2] counter++ → 431 (mutex held — safe!)
[Thread 1] counter++ → 432 (mutex held — safe!)
[Thread 4] counter++ → 433 (mutex held — safe!)
[Thread 5] counter++ → 434 (mutex held — safe!)
[Thread 3] counter++ → 435 (mutex held — safe!)
[Thread 2] counter++ → 436 (mutex held — safe!)
[Thread 1] counter++ → 437 (mutex held — safe!)
[Thread 4] counter++ → 438 (mutex held — safe!)
[Thread 5] counter++ → 439 (mutex held — safe!)
[Thread 3] counter++ → 440 (mutex held — safe!)
[Thread 2] counter++ → 441 (mutex held — safe!)
[Thread 1] counter++ → 442 (mutex held — safe!)
[Thread 4] counter++ → 443 (mutex held — safe!)
[Thread 5] counter++ → 444 (mutex held — safe!)
[Thread 3] counter++ → 445 (mutex held — safe!)
[Thread 2] counter++ → 446 (mutex held — safe!)
[Thread 1] counter++ → 447 (mutex held — safe!)
[Thread 4] counter++ → 448 (mutex held — safe!)
[Thread 5] counter++ → 449 (mutex held — safe!)
[Thread 3] counter++ → 450 (mutex held — safe!)
[Thread 2] counter++ → 451 (mutex held — safe!)
[Thread 1] counter++ → 452 (mutex held — safe!)
[Thread 4] counter++ → 453 (mutex held — safe!)
[Thread 5] counter++ → 454 (mutex held — safe!)
[Thread 3] counter++ → 455 (mutex held — safe!)
[Thread 2] counter++ → 456 (mutex held — safe!)
[Thread 1] counter++ → 457 (mutex held — safe!)
[Thread 4] counter++ → 458 (mutex held — safe!)
[Thread 5] counter++ → 459 (mutex held — safe!)
[Thread 3] counter++ → 460 (mutex held — safe!)
[Thread 2] counter++ → 461 (mutex held — safe!)
[Thread 1] counter++ → 462 (mutex held — safe!)
[Thread 4] counter++ → 463 (mutex held — safe!)
[Thread 5] counter++ → 464 (mutex held — safe!)
[Thread 3] counter++ → 465 (mutex held — safe!)
[Thread 2] counter++ → 466 (mutex held — safe!)
[Thread 4] counter++ → 467 (mutex held — safe!)
[Thread 1] counter++ → 468 (mutex held — safe!)
[Thread 5] counter++ → 469 (mutex held — safe!)
[Thread 3] counter++ → 470 (mutex held — safe!)
[Thread 2] counter++ → 471 (mutex held — safe!)
[Thread 4] counter++ → 472 (mutex held — safe!)
[Thread 1] counter++ → 473 (mutex held — safe!)
[Thread 5] counter++ → 474 (mutex held — safe!)
[Thread 3] counter++ → 475 (mutex held — safe!)
[Thread 2] counter++ → 476 (mutex held — safe!)
[Thread 4] counter++ → 477 (mutex held — safe!)
[Thread 1] counter++ → 478 (mutex held — safe!)
[Thread 5] counter++ → 479 (mutex held — safe!)
[Thread 3] counter++ → 480 (mutex held — safe!)
[Thread 2] counter++ → 481 (mutex held — safe!)
[Thread 4] counter++ → 482 (mutex held — safe!)
[Thread 1] counter++ → 483 (mutex held — safe!)
[Thread 5] counter++ → 484 (mutex held — safe!)
[Thread 3] counter++ → 485 (mutex held — safe!)
[Thread 2] counter++ → 486 (mutex held — safe!)
[Thread 4] counter++ → 487 (mutex held — safe!)
[Thread 1] counter++ → 488 (mutex held — safe!)
[Thread 5] counter++ → 489 (mutex held — safe!)
[Thread 3] counter++ → 490 (mutex held — safe!)
[Thread 2] counter++ → 491 (mutex held — safe!)
[Thread 4] counter++ → 492 (mutex held — safe!)
[Thread 1] counter++ → 493 (mutex held — safe!)
[Thread 5] counter++ → 494 (mutex held — safe!)
[Thread 3] counter++ → 495 (mutex held — safe!)
[Thread 2] counter++ → 496 (mutex held — safe!)
[Thread 4] counter++ → 497 (mutex held — safe!)
[Thread 1] counter++ → 498 (mutex held — safe!)
[Thread 5] counter++ → 499 (mutex held — safe!)
[Thread 3] counter++ → 500 (mutex held — safe!)

--- All threads finished ---
[Main] Final counter: 500 (expected 500 — always correct with mutex!)
3

Producer-Consumer with Condition Variables

The classic producer-consumer pattern using a mutex and pthread_cond_wait/pthread_cond_signal.

09-pthread-mutex-cond-wait.c121 lines
Expected Outputclick Run to execute live
[Program timed out after 5 seconds]

Open Full Terminal

Get a Linux terminal with all 3 files from this lesson pre-loaded. Compile, run, and experiment freely.