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:
TaskDeleter()28     TaskDeleter() {};
~TaskDeleter()29     virtual ~TaskDeleter() {}
30     virtual void FreeMem() = 0;
31 
IncDeleteRef()32     inline uint32_t IncDeleteRef()
33     {
34         auto v = rc.fetch_add(1);
35         return v;
36     }
37 
DecDeleteRef()38     inline uint32_t DecDeleteRef()
39     {
40         auto v = rc.fetch_sub(1);
41         if (v == 1) {
42             FreeMem();
43         }
44         return v;
45     }
46     std::atomic_uint32_t rc = 1;
47 };
48 } // namespace ffrt
49 
50 #endif // UTIL_TASK_DELETER_HPP
51