2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file naive_synchronization_object.cpp
18 * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
20 * @brief This file is the implementation file of SQL naive
21 * synchronization object
24 #include <dpl/db/naive_synchronization_object.h>
25 #include <dpl/assert.h>
29 unsigned int seed = time(NULL);
32 //Taken from Thread class, so we don't have to pull whole definition
33 //(only this part is needed)
36 static const size_t NANOSECONDS_PER_SECOND =
37 static_cast<uint64_t>(1000 * 1000 * 1000);
39 static const size_t NANOSECONDS_PER_MILISECOND =
40 static_cast<uint64_t>(1000 * 1000);
42 void NanoSleep(uint64_t nanoseconds)
44 timespec requestedTime = {
46 nanoseconds / NANOSECONDS_PER_SECOND),
49 nanoseconds % NANOSECONDS_PER_SECOND)
52 timespec remainingTime;
55 if (nanosleep(&requestedTime, &remainingTime) == 0) {
60 Assert(error == EINTR);
62 requestedTime = remainingTime;
66 void MiliSleep(uint64_t miliseconds)
68 NanoSleep(miliseconds * NANOSECONDS_PER_MILISECOND);
74 void NaiveSynchronizationObject::Synchronize()
76 // Sleep for about 10ms - 30ms
77 Thread::MiliSleep(10 + rand_r(&seed) % 20);
80 void NaiveSynchronizationObject::NotifyAll()
82 // No need to inform about anything