• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 
3 /*
4  * Copyright (c) 2023 Huawei Device Co., Ltd.
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 #ifndef UTIL_TASK_DELETER_HPP
19 #define UTIL_TASK_DELETER_HPP
20 
21 #include <atomic>
22 #include "internal_inc/non_copyable.h"
23 #include "sched/execute_ctx.h"
24 
25 namespace ffrt {
26 class TaskDeleter : private NonCopyable {
27 public:
28     TaskDeleter();
~TaskDeleter()29     virtual ~TaskDeleter() {}
30     virtual void freeMem() = 0;
31 
IncDeleteRef()32     inline void IncDeleteRef()
33     {
34         rc.fetch_add(1);
35     }
36 
DecDeleteRef()37     inline void DecDeleteRef()
38     {
39         auto v = rc.fetch_sub(1);
40         if (v == 1) {
41             freeMem();
42         }
43     }
44     uintptr_t reserved;
45     uintptr_t type = 0;
46     WaitEntry fq_we; // used on fifo fast que
47     std::atomic_uint32_t rc = 1;
48     const uint64_t gid; // global unique id in this process
49 };
50 } // namespace ffrt
51 
52 #endif // UTIL_TASK_DELETER_HPP
53