@@ -254,7 +254,6 @@ int __libcpp_tls_set(__libcpp_tls_key __key, void *__p);
254
254
255
255
#if defined(_LIBCPP_HAS_THREAD_API_PTHREAD)
256
256
257
- _LIBCPP_HIDE_FROM_ABI inline
258
257
int __libcpp_recursive_mutex_init (__libcpp_recursive_mutex_t *__m)
259
258
{
260
259
pthread_mutexattr_t attr;
@@ -279,129 +278,109 @@ int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t *__m)
279
278
return 0 ;
280
279
}
281
280
282
- _LIBCPP_HIDE_FROM_ABI inline
283
281
int __libcpp_recursive_mutex_lock (__libcpp_recursive_mutex_t *__m)
284
282
{
285
283
return pthread_mutex_lock (__m);
286
284
}
287
285
288
- _LIBCPP_HIDE_FROM_ABI inline
289
286
bool __libcpp_recursive_mutex_trylock (__libcpp_recursive_mutex_t *__m)
290
287
{
291
288
return pthread_mutex_trylock (__m) == 0 ;
292
289
}
293
290
294
- _LIBCPP_HIDE_FROM_ABI inline
295
291
int __libcpp_recursive_mutex_unlock (__libcpp_recursive_mutex_t *__m)
296
292
{
297
293
return pthread_mutex_unlock (__m);
298
294
}
299
295
300
- _LIBCPP_HIDE_FROM_ABI inline
301
296
int __libcpp_recursive_mutex_destroy (__libcpp_recursive_mutex_t *__m)
302
297
{
303
298
return pthread_mutex_destroy (__m);
304
299
}
305
300
306
- _LIBCPP_HIDE_FROM_ABI inline
307
301
int __libcpp_mutex_lock (__libcpp_mutex_t *__m)
308
302
{
309
303
return pthread_mutex_lock (__m);
310
304
}
311
305
312
- _LIBCPP_HIDE_FROM_ABI inline
313
306
bool __libcpp_mutex_trylock (__libcpp_mutex_t *__m)
314
307
{
315
308
return pthread_mutex_trylock (__m) == 0 ;
316
309
}
317
310
318
- _LIBCPP_HIDE_FROM_ABI inline
319
311
int __libcpp_mutex_unlock (__libcpp_mutex_t *__m)
320
312
{
321
313
return pthread_mutex_unlock (__m);
322
314
}
323
315
324
- _LIBCPP_HIDE_FROM_ABI inline
325
316
int __libcpp_mutex_destroy (__libcpp_mutex_t *__m)
326
317
{
327
318
return pthread_mutex_destroy (__m);
328
319
}
329
320
330
321
// Condition Variable
331
- _LIBCPP_HIDE_FROM_ABI inline
332
322
int __libcpp_condvar_signal (__libcpp_condvar_t *__cv)
333
323
{
334
324
return pthread_cond_signal (__cv);
335
325
}
336
326
337
- _LIBCPP_HIDE_FROM_ABI inline
338
327
int __libcpp_condvar_broadcast (__libcpp_condvar_t *__cv)
339
328
{
340
329
return pthread_cond_broadcast (__cv);
341
330
}
342
331
343
- _LIBCPP_HIDE_FROM_ABI inline
344
332
int __libcpp_condvar_wait (__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m)
345
333
{
346
334
return pthread_cond_wait (__cv, __m);
347
335
}
348
336
349
- _LIBCPP_HIDE_FROM_ABI inline
350
337
int __libcpp_condvar_timedwait (__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m,
351
338
__libcpp_timespec_t *__ts)
352
339
{
353
340
return pthread_cond_timedwait (__cv, __m, __ts);
354
341
}
355
342
356
- _LIBCPP_HIDE_FROM_ABI inline
357
343
int __libcpp_condvar_destroy (__libcpp_condvar_t *__cv)
358
344
{
359
345
return pthread_cond_destroy (__cv);
360
346
}
361
347
362
348
// Execute once
363
- _LIBCPP_HIDE_FROM_ABI inline
364
349
int __libcpp_execute_once (__libcpp_exec_once_flag *flag,
365
350
void (*init_routine)()) {
366
351
return pthread_once (flag, init_routine);
367
352
}
368
353
369
354
// Thread id
370
355
// Returns non-zero if the thread ids are equal, otherwise 0
371
- _LIBCPP_HIDE_FROM_ABI inline
372
356
bool __libcpp_thread_id_equal (__libcpp_thread_id t1, __libcpp_thread_id t2)
373
357
{
374
358
return t1 == t2;
375
359
}
376
360
377
361
// Returns non-zero if t1 < t2, otherwise 0
378
- _LIBCPP_HIDE_FROM_ABI inline
379
362
bool __libcpp_thread_id_less (__libcpp_thread_id t1, __libcpp_thread_id t2)
380
363
{
381
364
return t1 < t2;
382
365
}
383
366
384
367
// Thread
385
- _LIBCPP_HIDE_FROM_ABI inline
386
368
bool __libcpp_thread_isnull (const __libcpp_thread_t *__t ) {
387
369
return __libcpp_thread_get_id (__t ) == 0 ;
388
370
}
389
371
390
- _LIBCPP_HIDE_FROM_ABI inline
391
372
int __libcpp_thread_create (__libcpp_thread_t *__t , void *(*__func)(void *),
392
373
void *__arg)
393
374
{
394
375
return pthread_create (__t , nullptr , __func, __arg);
395
376
}
396
377
397
- _LIBCPP_HIDE_FROM_ABI inline
398
378
__libcpp_thread_id __libcpp_thread_get_current_id ()
399
379
{
400
380
const __libcpp_thread_t thread = pthread_self ();
401
381
return __libcpp_thread_get_id (&thread);
402
382
}
403
383
404
- _LIBCPP_HIDE_FROM_ABI inline
405
384
__libcpp_thread_id __libcpp_thread_get_id (const __libcpp_thread_t *__t )
406
385
{
407
386
#if defined(__MVS__)
@@ -411,144 +390,122 @@ __libcpp_thread_id __libcpp_thread_get_id(const __libcpp_thread_t *__t)
411
390
#endif
412
391
}
413
392
414
- _LIBCPP_HIDE_FROM_ABI inline
415
393
int __libcpp_thread_join (__libcpp_thread_t *__t )
416
394
{
417
395
return pthread_join (*__t , nullptr );
418
396
}
419
397
420
- _LIBCPP_HIDE_FROM_ABI inline
421
398
int __libcpp_thread_detach (__libcpp_thread_t *__t )
422
399
{
423
400
return pthread_detach (*__t );
424
401
}
425
402
426
- _LIBCPP_HIDE_FROM_ABI inline
427
403
void __libcpp_thread_yield ()
428
404
{
429
405
sched_yield ();
430
406
}
431
407
432
- _LIBCPP_HIDE_FROM_ABI inline
433
408
void __libcpp_thread_sleep_for (const chrono::nanoseconds& __ns)
434
409
{
435
410
__libcpp_timespec_t __ts = _VSTD::__convert_to_timespec<__libcpp_timespec_t >(__ns);
436
411
while (nanosleep (&__ts, &__ts) == -1 && errno == EINTR);
437
412
}
438
413
439
414
// Thread local storage
440
- _LIBCPP_HIDE_FROM_ABI inline
441
415
int __libcpp_tls_create (__libcpp_tls_key *__key, void (*__at_exit)(void *))
442
416
{
443
417
return pthread_key_create (__key, __at_exit);
444
418
}
445
419
446
- _LIBCPP_HIDE_FROM_ABI inline
447
420
void *__libcpp_tls_get (__libcpp_tls_key __key)
448
421
{
449
422
return pthread_getspecific (__key);
450
423
}
451
424
452
- _LIBCPP_HIDE_FROM_ABI inline
453
425
int __libcpp_tls_set (__libcpp_tls_key __key, void *__p)
454
426
{
455
427
return pthread_setspecific (__key, __p);
456
428
}
457
429
458
430
#elif defined(_LIBCPP_HAS_THREAD_API_C11)
459
431
460
- _LIBCPP_HIDE_FROM_ABI inline
461
432
int __libcpp_recursive_mutex_init (__libcpp_recursive_mutex_t *__m)
462
433
{
463
434
return mtx_init (__m, mtx_plain | mtx_recursive) == thrd_success ? 0 : EINVAL;
464
435
}
465
436
466
- _LIBCPP_HIDE_FROM_ABI inline
467
437
int __libcpp_recursive_mutex_lock (__libcpp_recursive_mutex_t *__m)
468
438
{
469
439
return mtx_lock (__m) == thrd_success ? 0 : EINVAL;
470
440
}
471
441
472
- _LIBCPP_HIDE_FROM_ABI inline
473
442
bool __libcpp_recursive_mutex_trylock (__libcpp_recursive_mutex_t *__m)
474
443
{
475
444
return mtx_trylock (__m) == thrd_success;
476
445
}
477
446
478
- _LIBCPP_HIDE_FROM_ABI inline
479
447
int __libcpp_recursive_mutex_unlock (__libcpp_recursive_mutex_t *__m)
480
448
{
481
449
return mtx_unlock (__m) == thrd_success ? 0 : EINVAL;
482
450
}
483
451
484
- _LIBCPP_HIDE_FROM_ABI inline
485
452
int __libcpp_recursive_mutex_destroy (__libcpp_recursive_mutex_t *__m)
486
453
{
487
454
mtx_destroy (__m);
488
455
return 0 ;
489
456
}
490
457
491
- _LIBCPP_HIDE_FROM_ABI inline
492
458
int __libcpp_mutex_lock (__libcpp_mutex_t *__m)
493
459
{
494
460
return mtx_lock (__m) == thrd_success ? 0 : EINVAL;
495
461
}
496
462
497
- _LIBCPP_HIDE_FROM_ABI inline
498
463
bool __libcpp_mutex_trylock (__libcpp_mutex_t *__m)
499
464
{
500
465
return mtx_trylock (__m) == thrd_success;
501
466
}
502
467
503
- _LIBCPP_HIDE_FROM_ABI inline
504
468
int __libcpp_mutex_unlock (__libcpp_mutex_t *__m)
505
469
{
506
470
return mtx_unlock (__m) == thrd_success ? 0 : EINVAL;
507
471
}
508
472
509
- _LIBCPP_HIDE_FROM_ABI inline
510
473
int __libcpp_mutex_destroy (__libcpp_mutex_t *__m)
511
474
{
512
475
mtx_destroy (__m);
513
476
return 0 ;
514
477
}
515
478
516
479
// Condition Variable
517
- _LIBCPP_HIDE_FROM_ABI inline
518
480
int __libcpp_condvar_signal (__libcpp_condvar_t *__cv)
519
481
{
520
482
return cnd_signal (__cv) == thrd_success ? 0 : EINVAL;
521
483
}
522
484
523
- _LIBCPP_HIDE_FROM_ABI inline
524
485
int __libcpp_condvar_broadcast (__libcpp_condvar_t *__cv)
525
486
{
526
487
return cnd_broadcast (__cv) == thrd_success ? 0 : EINVAL;
527
488
}
528
489
529
- _LIBCPP_HIDE_FROM_ABI inline
530
490
int __libcpp_condvar_wait (__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m)
531
491
{
532
492
return cnd_wait (__cv, __m) == thrd_success ? 0 : EINVAL;
533
493
}
534
494
535
- _LIBCPP_HIDE_FROM_ABI inline
536
495
int __libcpp_condvar_timedwait (__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m,
537
496
timespec *__ts)
538
497
{
539
498
int __ec = cnd_timedwait (__cv, __m, __ts);
540
499
return __ec == thrd_timedout ? ETIMEDOUT : __ec;
541
500
}
542
501
543
- _LIBCPP_HIDE_FROM_ABI inline
544
502
int __libcpp_condvar_destroy (__libcpp_condvar_t *__cv)
545
503
{
546
504
cnd_destroy (__cv);
547
505
return 0 ;
548
506
}
549
507
550
508
// Execute once
551
- _LIBCPP_HIDE_FROM_ABI inline
552
509
int __libcpp_execute_once (__libcpp_exec_once_flag *flag,
553
510
void (*init_routine)(void )) {
554
511
::call_once (flag, init_routine);
@@ -557,84 +514,71 @@ int __libcpp_execute_once(__libcpp_exec_once_flag *flag,
557
514
558
515
// Thread id
559
516
// Returns non-zero if the thread ids are equal, otherwise 0
560
- _LIBCPP_HIDE_FROM_ABI inline
561
517
bool __libcpp_thread_id_equal (__libcpp_thread_id t1, __libcpp_thread_id t2)
562
518
{
563
519
return thrd_equal (t1, t2) != 0 ;
564
520
}
565
521
566
522
// Returns non-zero if t1 < t2, otherwise 0
567
- _LIBCPP_HIDE_FROM_ABI inline
568
523
bool __libcpp_thread_id_less (__libcpp_thread_id t1, __libcpp_thread_id t2)
569
524
{
570
525
return t1 < t2;
571
526
}
572
527
573
528
// Thread
574
- _LIBCPP_HIDE_FROM_ABI inline
575
529
bool __libcpp_thread_isnull (const __libcpp_thread_t *__t ) {
576
530
return __libcpp_thread_get_id (__t ) == 0 ;
577
531
}
578
532
579
- _LIBCPP_HIDE_FROM_ABI inline
580
533
int __libcpp_thread_create (__libcpp_thread_t *__t , void *(*__func)(void *),
581
534
void *__arg)
582
535
{
583
536
int __ec = thrd_create (__t , reinterpret_cast <thrd_start_t >(__func), __arg);
584
537
return __ec == thrd_nomem ? ENOMEM : __ec;
585
538
}
586
539
587
- _LIBCPP_HIDE_FROM_ABI inline
588
540
__libcpp_thread_id __libcpp_thread_get_current_id ()
589
541
{
590
542
return thrd_current ();
591
543
}
592
544
593
- _LIBCPP_HIDE_FROM_ABI inline
594
545
__libcpp_thread_id __libcpp_thread_get_id (const __libcpp_thread_t *__t )
595
546
{
596
547
return *__t ;
597
548
}
598
549
599
- _LIBCPP_HIDE_FROM_ABI inline
600
550
int __libcpp_thread_join (__libcpp_thread_t *__t )
601
551
{
602
552
return thrd_join (*__t , nullptr ) == thrd_success ? 0 : EINVAL;
603
553
}
604
554
605
- _LIBCPP_HIDE_FROM_ABI inline
606
555
int __libcpp_thread_detach (__libcpp_thread_t *__t )
607
556
{
608
557
return thrd_detach (*__t ) == thrd_success ? 0 : EINVAL;
609
558
}
610
559
611
- _LIBCPP_HIDE_FROM_ABI inline
612
560
void __libcpp_thread_yield ()
613
561
{
614
562
thrd_yield ();
615
563
}
616
564
617
- _LIBCPP_HIDE_FROM_ABI inline
618
565
void __libcpp_thread_sleep_for (const chrono::nanoseconds& __ns)
619
566
{
620
567
__libcpp_timespec_t __ts = _VSTD::__convert_to_timespec<__libcpp_timespec_t >(__ns);
621
568
thrd_sleep (&__ts, nullptr );
622
569
}
623
570
624
571
// Thread local storage
625
- _LIBCPP_HIDE_FROM_ABI inline
626
572
int __libcpp_tls_create (__libcpp_tls_key *__key, void (*__at_exit)(void *))
627
573
{
628
574
return tss_create (__key, __at_exit) == thrd_success ? 0 : EINVAL;
629
575
}
630
576
631
- _LIBCPP_HIDE_FROM_ABI inline
632
577
void *__libcpp_tls_get (__libcpp_tls_key __key)
633
578
{
634
579
return tss_get (__key);
635
580
}
636
581
637
- _LIBCPP_HIDE_FROM_ABI inline
638
582
int __libcpp_tls_set (__libcpp_tls_key __key, void *__p)
639
583
{
640
584
return tss_set (__key, __p) == thrd_success ? 0 : EINVAL;
0 commit comments