Home | History | Annotate | Download | only in gpr
      1 /*
      2  *
      3  * Copyright 2015 gRPC authors.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  *
     17  */
     18 
     19 /* Test of gpr thread local storage support. */
     20 
     21 #include "src/core/lib/gpr/tls.h"
     22 
     23 #include <stdio.h>
     24 #include <stdlib.h>
     25 
     26 #include <grpc/support/log.h>
     27 #include <grpc/support/sync.h>
     28 
     29 #include "src/core/lib/gprpp/thd.h"
     30 #include "test/core/util/test_config.h"
     31 
     32 #define NUM_THREADS 100
     33 
     34 GPR_TLS_DECL(test_var);
     35 
     36 static void thd_body(void* arg) {
     37   intptr_t i;
     38 
     39   GPR_ASSERT(gpr_tls_get(&test_var) == 0);
     40 
     41   for (i = 0; i < 100000; i++) {
     42     gpr_tls_set(&test_var, i);
     43     GPR_ASSERT(gpr_tls_get(&test_var) == i);
     44   }
     45   gpr_tls_set(&test_var, 0);
     46 }
     47 
     48 /* ------------------------------------------------- */
     49 
     50 int main(int argc, char* argv[]) {
     51   grpc_core::Thread threads[NUM_THREADS];
     52 
     53   grpc_test_init(argc, argv);
     54 
     55   gpr_tls_init(&test_var);
     56 
     57   for (auto& th : threads) {
     58     th = grpc_core::Thread("grpc_tls_test", thd_body, nullptr);
     59     th.Start();
     60   }
     61   for (auto& th : threads) {
     62     th.Join();
     63   }
     64 
     65   gpr_tls_destroy(&test_var);
     66 
     67   return 0;
     68 }
     69