* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef KERNEL_LITE_MT_UTILS
#define KERNEL_LITE_MT_UTILS
#include <cstdint>
int CountPrimes(uint32_t maxNumber);
* desc: keep cpu run for 'ms' miliseconds, without any syscall or pend operation
* input: miliseconds value, only some specific value is supported, as below:
* -- 10, 20, 30, 60, 100, 150, 200, 300, 400, 600, 1000, 2000
* output: useless, only used for avoid the whole function is optimized by gcc
* note: the actual elasped time is not so accurate
*/
int BusyRun(uint32_t ms);
* desc: used for check if the code is runned as expected, in multi-thread or multi-process scenario
* input: step -- from 1 to 15(0xf).
* output: the actual steps the this function is called.
Example:
LOG("step=%lx", CheckStep(1)); // may called in thread 1
LOG("step=%lx", CheckStep(2)); // may called in thread 2
LOG("step=%lx", CheckStep(3)); // may called in thread 3
LOG("step=%lx", CheckStep(4)); // may called in thread 2
uint64_t step = CheckStep(5); // may called in thread 1
if (step == 0x12345) {
LOG("everything is ok");
} else {
LOG("code not run as expected!");
}
Output:
step=1
step=12
step=123
step=1234
everything is ok
*/
uint64_t CheckStep(int step);
* desc: used for synchronize in multi-process scenario, not suitable for multi-thread.
* usage:
InitPipe();
fork();
if parent
...
BlockOnPipe(); // will block until UnBlockPipe is called in another process.
...
if child
...
UnBlockPipe();
...
*/
int InitPipe();
void BlockOnPipe();
void UnBlockPipe();
* desc: get and set a global variable, can be used in multi-process scenario
* usage:
* InitGlobalVariable();
* fork();
* if child
* ...
* SetGlobalVariable(x);
* ...
* if parent
* ...
* SetGlobalVariable(y);
* ...
* int i = GetGlobalVariable();
* // check if i is ok
* ...
* DeleteGlobalVariable(); // Call before exit
* exit...
*/
int InitGlobalVariable();
int SetGlobalVariable(int value);
int GetGlobalVariable();
int DeleteGlobalVariable();
#endif